paean 0.8.35 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/api/apikey.d.ts +39 -0
  2. package/dist/api/apikey.d.ts.map +1 -0
  3. package/dist/api/apikey.js +58 -0
  4. package/dist/api/apikey.js.map +1 -0
  5. package/dist/cli.js +7 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/a8e.d.ts +7 -0
  8. package/dist/commands/a8e.d.ts.map +1 -0
  9. package/dist/commands/a8e.js +232 -0
  10. package/dist/commands/a8e.js.map +1 -0
  11. package/dist/commands/agent.d.ts +1 -0
  12. package/dist/commands/agent.d.ts.map +1 -1
  13. package/dist/commands/agent.js +18 -0
  14. package/dist/commands/agent.js.map +1 -1
  15. package/dist/commands/wechat.d.ts +13 -0
  16. package/dist/commands/wechat.d.ts.map +1 -0
  17. package/dist/commands/wechat.js +154 -0
  18. package/dist/commands/wechat.js.map +1 -0
  19. package/dist/mcp/cli-agent-tools.d.ts.map +1 -1
  20. package/dist/mcp/cli-agent-tools.js +97 -3
  21. package/dist/mcp/cli-agent-tools.js.map +1 -1
  22. package/dist/mcp/worker-tools.d.ts.map +1 -1
  23. package/dist/mcp/worker-tools.js +6 -3
  24. package/dist/mcp/worker-tools.js.map +1 -1
  25. package/dist/wechat/api.d.ts +52 -0
  26. package/dist/wechat/api.d.ts.map +1 -0
  27. package/dist/wechat/api.js +110 -0
  28. package/dist/wechat/api.js.map +1 -0
  29. package/dist/wechat/credentials.d.ts +7 -0
  30. package/dist/wechat/credentials.d.ts.map +1 -0
  31. package/dist/wechat/credentials.js +52 -0
  32. package/dist/wechat/credentials.js.map +1 -0
  33. package/dist/wechat/service.d.ts +42 -0
  34. package/dist/wechat/service.d.ts.map +1 -0
  35. package/dist/wechat/service.js +148 -0
  36. package/dist/wechat/service.js.map +1 -0
  37. package/dist/worker/executors/articulate.d.ts +36 -3
  38. package/dist/worker/executors/articulate.d.ts.map +1 -1
  39. package/dist/worker/executors/articulate.js +122 -8
  40. package/dist/worker/executors/articulate.js.map +1 -1
  41. package/dist/worker/supervisor.d.ts +4 -2
  42. package/dist/worker/supervisor.d.ts.map +1 -1
  43. package/dist/worker/supervisor.js +92 -52
  44. package/dist/worker/supervisor.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ import type { AccountData } from './api.js';
2
+ export declare function loadCredentials(): AccountData | null;
3
+ export declare function saveCredentials(data: AccountData): void;
4
+ export declare function removeCredentials(): void;
5
+ export declare function loadSyncBuf(): string;
6
+ export declare function saveSyncBuf(buf: string): void;
7
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/wechat/credentials.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAM5C,wBAAgB,eAAe,IAAI,WAAW,GAAG,IAAI,CAKpD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAIvD;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAGxC;AAED,wBAAgB,WAAW,IAAI,MAAM,CAGpC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE7C"}
@@ -0,0 +1,52 @@
1
+ import fs from 'fs';
2
+ import { join } from 'path';
3
+ import { getConfigDir } from '../utils/config.js';
4
+ function wechatDir() { return join(getConfigDir(), 'wechat'); }
5
+ function credFile() { return join(wechatDir(), 'account.json'); }
6
+ function syncFile() { return join(wechatDir(), 'sync_buf.txt'); }
7
+ export function loadCredentials() {
8
+ try {
9
+ if (!fs.existsSync(credFile()))
10
+ return null;
11
+ return JSON.parse(fs.readFileSync(credFile(), 'utf-8'));
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
17
+ export function saveCredentials(data) {
18
+ fs.mkdirSync(wechatDir(), { recursive: true });
19
+ fs.writeFileSync(credFile(), JSON.stringify(data, null, 2), 'utf-8');
20
+ try {
21
+ fs.chmodSync(credFile(), 0o600);
22
+ }
23
+ catch { /* best-effort */ }
24
+ }
25
+ export function removeCredentials() {
26
+ try {
27
+ if (fs.existsSync(credFile()))
28
+ fs.unlinkSync(credFile());
29
+ }
30
+ catch { /* ignore */ }
31
+ try {
32
+ if (fs.existsSync(syncFile()))
33
+ fs.unlinkSync(syncFile());
34
+ }
35
+ catch { /* ignore */ }
36
+ }
37
+ export function loadSyncBuf() {
38
+ try {
39
+ if (fs.existsSync(syncFile()))
40
+ return fs.readFileSync(syncFile(), 'utf-8');
41
+ }
42
+ catch { /* ignore */ }
43
+ return '';
44
+ }
45
+ export function saveSyncBuf(buf) {
46
+ try {
47
+ fs.mkdirSync(wechatDir(), { recursive: true });
48
+ fs.writeFileSync(syncFile(), buf, 'utf-8');
49
+ }
50
+ catch { /* ignore */ }
51
+ }
52
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/wechat/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,SAAS,SAAS,KAAa,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvE,SAAS,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AACzE,SAAS,QAAQ,KAAa,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,UAAU,eAAe;IAC3B,IAAI,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAiB;IAC7C,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxF,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1G,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAW;IACnC,IAAI,CAAC;QAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AAC9H,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * WeChat Gateway Service for Paean CLI
3
+ *
4
+ * Polls WeChat ilink API for incoming messages, routes them through
5
+ * the agent service, and sends replies back via WeChat.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ export interface WechatGatewayConfig {
9
+ debug?: boolean;
10
+ }
11
+ export type WechatGatewayEvent = {
12
+ type: 'started';
13
+ } | {
14
+ type: 'stopped';
15
+ } | {
16
+ type: 'message_received';
17
+ sender: string;
18
+ text: string;
19
+ } | {
20
+ type: 'reply_sent';
21
+ sender: string;
22
+ } | {
23
+ type: 'error';
24
+ error: string;
25
+ };
26
+ export declare class WechatGatewayService extends EventEmitter {
27
+ private config;
28
+ private running;
29
+ private account;
30
+ private mcpState;
31
+ private onMcpToolCall;
32
+ private contextTokenCache;
33
+ constructor(config?: WechatGatewayConfig);
34
+ setMcpState(mcpState: unknown, onMcpToolCall: unknown): void;
35
+ start(): Promise<void>;
36
+ stop(): Promise<void>;
37
+ private pollLoop;
38
+ private processMessage;
39
+ private backoff;
40
+ private log;
41
+ }
42
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/wechat/service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAMvC,qBAAa,oBAAqB,SAAQ,YAAY;IAClD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,iBAAiB,CAA6B;gBAE1C,MAAM,GAAE,mBAAwB;IAK5C,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAKtD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAKb,QAAQ;YAmCR,cAAc;YA0Cd,OAAO;IAQrB,OAAO,CAAC,GAAG;CAGd"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * WeChat Gateway Service for Paean CLI
3
+ *
4
+ * Polls WeChat ilink API for incoming messages, routes them through
5
+ * the agent service, and sends replies back via WeChat.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { agentService, extractErrorMessage } from '../agent/service.js';
9
+ import { executeSystemTool } from '../mcp/system.js';
10
+ import { getUpdates, sendTextMessage, extractText, MSG_TYPE_USER, } from './api.js';
11
+ import { loadCredentials, loadSyncBuf, saveSyncBuf } from './credentials.js';
12
+ const MAX_CONSECUTIVE_FAILURES = 3;
13
+ const BACKOFF_DELAY_MS = 30_000;
14
+ const RETRY_DELAY_MS = 2_000;
15
+ export class WechatGatewayService extends EventEmitter {
16
+ config;
17
+ running = false;
18
+ account = null;
19
+ mcpState = null;
20
+ onMcpToolCall = null;
21
+ contextTokenCache = new Map();
22
+ constructor(config = {}) {
23
+ super();
24
+ this.config = config;
25
+ }
26
+ setMcpState(mcpState, onMcpToolCall) {
27
+ this.mcpState = mcpState;
28
+ this.onMcpToolCall = onMcpToolCall;
29
+ }
30
+ async start() {
31
+ this.account = loadCredentials();
32
+ if (!this.account) {
33
+ this.emit('event', { type: 'error', error: 'No WeChat credentials. Run `paean wechat setup` first.' });
34
+ return;
35
+ }
36
+ this.running = true;
37
+ this.emit('event', { type: 'started' });
38
+ this.log(`WeChat channel active (account: ${this.account.accountId})`);
39
+ await this.pollLoop();
40
+ }
41
+ async stop() {
42
+ this.running = false;
43
+ this.emit('event', { type: 'stopped' });
44
+ }
45
+ async pollLoop() {
46
+ if (!this.account)
47
+ return;
48
+ let buf = loadSyncBuf();
49
+ let failures = 0;
50
+ while (this.running) {
51
+ try {
52
+ const resp = await getUpdates(this.account.baseUrl, this.account.token, buf);
53
+ const isErr = (resp.ret !== undefined && resp.ret !== 0) || (resp.errcode !== undefined && resp.errcode !== 0);
54
+ if (isErr) {
55
+ failures++;
56
+ this.log(`getUpdates error: ret=${resp.ret} errcode=${resp.errcode}`);
57
+ await this.backoff(failures);
58
+ continue;
59
+ }
60
+ failures = 0;
61
+ if (resp.get_updates_buf) {
62
+ buf = resp.get_updates_buf;
63
+ saveSyncBuf(buf);
64
+ }
65
+ for (const msg of resp.msgs ?? []) {
66
+ if (msg.message_type !== MSG_TYPE_USER)
67
+ continue;
68
+ const text = extractText(msg);
69
+ if (!text)
70
+ continue;
71
+ const senderId = msg.from_user_id ?? 'unknown';
72
+ if (msg.context_token)
73
+ this.contextTokenCache.set(senderId, msg.context_token);
74
+ this.emit('event', { type: 'message_received', sender: senderId, text });
75
+ await this.processMessage(senderId, text);
76
+ }
77
+ }
78
+ catch (err) {
79
+ failures++;
80
+ this.log(`Poll error: ${extractErrorMessage(err)}`);
81
+ await this.backoff(failures);
82
+ }
83
+ }
84
+ }
85
+ async processMessage(senderId, text) {
86
+ if (!this.account)
87
+ return;
88
+ let responseText = '';
89
+ const callbacks = {
90
+ onContent: (t, partial) => {
91
+ if (partial)
92
+ responseText += t;
93
+ else
94
+ responseText = t;
95
+ },
96
+ onMcpToolCall: async (callId, serverName, toolName, args) => {
97
+ if (typeof this.onMcpToolCall === 'function') {
98
+ try {
99
+ return await this.onMcpToolCall(callId, serverName, toolName, args);
100
+ }
101
+ catch (e) {
102
+ return { content: [{ type: 'text', text: `Error: ${extractErrorMessage(e)}` }], isError: true };
103
+ }
104
+ }
105
+ if (toolName.startsWith('paean_execute') || toolName.startsWith('paean_check') || toolName.startsWith('paean_kill')) {
106
+ const result = await executeSystemTool(toolName, args, { autonomousMode: true });
107
+ return { content: [{ type: 'text', text: JSON.stringify(result) }], isError: !result.success };
108
+ }
109
+ return { content: [{ type: 'text', text: 'MCP not available' }], isError: true };
110
+ },
111
+ onError: (error) => { this.log(`Agent error: ${error}`); },
112
+ onDone: async () => {
113
+ if (responseText && this.account) {
114
+ const ctx = this.contextTokenCache.get(senderId);
115
+ if (ctx) {
116
+ const maxLen = 2048;
117
+ for (let i = 0; i < responseText.length; i += maxLen) {
118
+ try {
119
+ await sendTextMessage(this.account.baseUrl, this.account.token, senderId, responseText.slice(i, i + maxLen), ctx);
120
+ }
121
+ catch (e) {
122
+ this.log(`Send failed: ${extractErrorMessage(e)}`);
123
+ }
124
+ }
125
+ this.emit('event', { type: 'reply_sent', sender: senderId });
126
+ }
127
+ }
128
+ },
129
+ };
130
+ agentService.streamMessage(text, callbacks, {
131
+ mcpState: this.mcpState,
132
+ cliMode: { enabled: true },
133
+ });
134
+ }
135
+ async backoff(failures) {
136
+ if (failures >= MAX_CONSECUTIVE_FAILURES) {
137
+ await new Promise(r => setTimeout(r, BACKOFF_DELAY_MS));
138
+ }
139
+ else {
140
+ await new Promise(r => setTimeout(r, RETRY_DELAY_MS));
141
+ }
142
+ }
143
+ log(msg) {
144
+ if (this.config.debug)
145
+ console.error(`[WeChat] ${msg}`);
146
+ }
147
+ }
148
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/wechat/service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
1
  /**
2
2
  * Articulate (a8e) CLI Executor
3
- * Integrates with the Articulate CLI for local-first AI-assisted coding tasks
3
+ * High-priority local sub-agent for coding and local processing tasks.
4
+ * Integrates with the Articulate CLI for AI-assisted development.
4
5
  * https://github.com/a8e-ai/a8e
5
6
  */
6
7
  import type { ExecutorOptions, ExecutorResult, AvailabilityStatus } from '../types.js';
7
8
  import type { AgentExecutor } from './index.js';
9
+ export interface A8eConfig {
10
+ provider?: string;
11
+ model?: string;
12
+ hasApiKey?: boolean;
13
+ }
8
14
  export declare class ArticulateExecutor implements AgentExecutor {
9
15
  readonly type: "articulate";
10
16
  private process;
@@ -14,10 +20,37 @@ export declare class ArticulateExecutor implements AgentExecutor {
14
20
  checkAvailability(): Promise<AvailabilityStatus>;
15
21
  execute(prompt: string, options?: ExecutorOptions): Promise<ExecutorResult>;
16
22
  /**
17
- * Build a8e CLI arguments for headless execution
18
- * Uses `a8e run --text <prompt>` for non-interactive mode
23
+ * Build a8e CLI arguments for headless execution.
24
+ * Uses `a8e run --text <prompt>` for non-interactive mode.
19
25
  */
20
26
  private buildArgs;
27
+ /**
28
+ * Build environment variables for the a8e subprocess.
29
+ * Injects Paean AI provider config as env vars so a8e picks them up
30
+ * even if config.yaml hasn't been written yet.
31
+ */
32
+ private buildA8eEnv;
33
+ /**
34
+ * Read a8e's current configuration from config.yaml + secrets.yaml
35
+ */
36
+ readA8eConfig(): A8eConfig;
37
+ /**
38
+ * Configure a8e to use Paean AI as provider with the given API key.
39
+ * Writes to ~/.config/a8e/config.yaml and secrets.yaml.
40
+ */
41
+ configureForPaean(apiKey: string, model?: string): void;
42
+ /**
43
+ * Upsert a key in a simple YAML document (key: value per line).
44
+ */
45
+ private upsertYamlKey;
21
46
  abort(): void;
22
47
  }
48
+ /** Static helpers for the a8e config directory */
49
+ export declare const A8E_PATHS: {
50
+ configDir: string;
51
+ configFile: string;
52
+ secretsFile: string;
53
+ defaultProvider: string;
54
+ defaultModel: string;
55
+ };
23
56
  //# sourceMappingURL=articulate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"articulate.d.ts","sourceRoot":"","sources":["../../../src/worker/executors/articulate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhD,qBAAa,kBAAmB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAc;IAIhC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAmChD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA4EjF;;;OAGG;IACH,OAAO,CAAC,SAAS;IAoBjB,KAAK,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"articulate.d.ts","sourceRoot":"","sources":["../../../src/worker/executors/articulate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAWhD,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,kBAAmB,YAAW,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAG,YAAY,CAAU;IACtC,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAAc;IAIhC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAmChD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IA8EjF;;;OAGG;IACH,OAAO,CAAC,SAAS;IAoBjB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,aAAa,IAAI,SAAS;IA2B1B;;;OAGG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAkCvD;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB,KAAK,IAAI,IAAI;CAMhB;AAED,kDAAkD;AAClD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC"}
@@ -1,12 +1,21 @@
1
1
  /**
2
2
  * Articulate (a8e) CLI Executor
3
- * Integrates with the Articulate CLI for local-first AI-assisted coding tasks
3
+ * High-priority local sub-agent for coding and local processing tasks.
4
+ * Integrates with the Articulate CLI for AI-assisted development.
4
5
  * https://github.com/a8e-ai/a8e
5
6
  */
6
7
  import { spawn } from 'child_process';
7
8
  import { promisify } from 'util';
8
9
  import { exec as execCallback } from 'child_process';
10
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { homedir } from 'os';
9
13
  const exec = promisify(execCallback);
14
+ const A8E_CONFIG_DIR = join(homedir(), '.config', 'a8e');
15
+ const A8E_CONFIG_PATH = join(A8E_CONFIG_DIR, 'config.yaml');
16
+ const A8E_SECRETS_PATH = join(A8E_CONFIG_DIR, 'secrets.yaml');
17
+ const A8E_DEFAULT_PROVIDER = 'paean_ai';
18
+ const A8E_DEFAULT_MODEL = 'gemini-3.1-flash-preview';
10
19
  export class ArticulateExecutor {
11
20
  type = 'articulate';
12
21
  process = null;
@@ -44,7 +53,7 @@ export class ArticulateExecutor {
44
53
  binaryExists: true,
45
54
  binaryPath,
46
55
  authStatus: 'unknown',
47
- authMessage: 'a8e uses BYOK (Bring Your Own Key) — ensure a provider is configured',
56
+ authMessage: 'a8e uses BYOK — ensure a provider is configured via `paean a8e configure`',
48
57
  };
49
58
  }
50
59
  }
@@ -53,7 +62,7 @@ export class ArticulateExecutor {
53
62
  available: false,
54
63
  binaryExists: false,
55
64
  authStatus: 'unknown',
56
- error: `Binary '${this.binaryPath}' not found in PATH. Install: curl -fsSL https://a8e.ai/install.sh | bash`,
65
+ error: `Binary '${this.binaryPath}' not found. Install with: paean a8e install`,
57
66
  };
58
67
  }
59
68
  }
@@ -63,10 +72,11 @@ export class ArticulateExecutor {
63
72
  return new Promise((resolve) => {
64
73
  let stdout = '';
65
74
  let stderr = '';
66
- const timeout = options?.timeout ?? 1800000; // 30 min default
75
+ const timeout = options?.timeout ?? 1800000;
76
+ const a8eEnv = this.buildA8eEnv(options?.env);
67
77
  this.process = spawn(this.binaryPath, args, {
68
78
  cwd: options?.cwd,
69
- env: { ...process.env, ...options?.env },
79
+ env: a8eEnv,
70
80
  stdio: ['ignore', 'pipe', 'pipe'],
71
81
  });
72
82
  const timeoutId = setTimeout(() => {
@@ -124,8 +134,8 @@ export class ArticulateExecutor {
124
134
  });
125
135
  }
126
136
  /**
127
- * Build a8e CLI arguments for headless execution
128
- * Uses `a8e run --text <prompt>` for non-interactive mode
137
+ * Build a8e CLI arguments for headless execution.
138
+ * Uses `a8e run --text <prompt>` for non-interactive mode.
129
139
  */
130
140
  buildArgs(prompt, options) {
131
141
  const args = ['run'];
@@ -134,13 +144,109 @@ export class ArticulateExecutor {
134
144
  args.push('--output-format', 'json');
135
145
  }
136
146
  if (options?.skipPermissions) {
137
- args.push('--no-session');
147
+ args.push('--dangerously-skip-permissions');
138
148
  }
139
149
  if (options?.args) {
140
150
  args.push(...options.args);
141
151
  }
142
152
  return args;
143
153
  }
154
+ /**
155
+ * Build environment variables for the a8e subprocess.
156
+ * Injects Paean AI provider config as env vars so a8e picks them up
157
+ * even if config.yaml hasn't been written yet.
158
+ */
159
+ buildA8eEnv(extraEnv) {
160
+ const env = { ...process.env };
161
+ const config = this.readA8eConfig();
162
+ if (!env.A8E_PROVIDER && config.provider) {
163
+ env.A8E_PROVIDER = config.provider;
164
+ }
165
+ if (!env.A8E_MODEL && config.model) {
166
+ env.A8E_MODEL = config.model;
167
+ }
168
+ if (extraEnv) {
169
+ Object.assign(env, extraEnv);
170
+ }
171
+ return env;
172
+ }
173
+ /**
174
+ * Read a8e's current configuration from config.yaml + secrets.yaml
175
+ */
176
+ readA8eConfig() {
177
+ const result = {};
178
+ try {
179
+ if (existsSync(A8E_CONFIG_PATH)) {
180
+ const content = readFileSync(A8E_CONFIG_PATH, 'utf-8');
181
+ const providerMatch = content.match(/^A8E_PROVIDER:\s*(.+)$/m);
182
+ const modelMatch = content.match(/^A8E_MODEL:\s*(.+)$/m);
183
+ if (providerMatch)
184
+ result.provider = providerMatch[1].trim();
185
+ if (modelMatch)
186
+ result.model = modelMatch[1].trim();
187
+ }
188
+ }
189
+ catch {
190
+ // Config not readable
191
+ }
192
+ try {
193
+ if (existsSync(A8E_SECRETS_PATH)) {
194
+ const content = readFileSync(A8E_SECRETS_PATH, 'utf-8');
195
+ result.hasApiKey = content.includes('PAEAN_AI_API_KEY');
196
+ }
197
+ }
198
+ catch {
199
+ // Secrets not readable
200
+ }
201
+ return result;
202
+ }
203
+ /**
204
+ * Configure a8e to use Paean AI as provider with the given API key.
205
+ * Writes to ~/.config/a8e/config.yaml and secrets.yaml.
206
+ */
207
+ configureForPaean(apiKey, model) {
208
+ mkdirSync(A8E_CONFIG_DIR, { recursive: true });
209
+ const targetModel = model || A8E_DEFAULT_MODEL;
210
+ let existingConfig = '';
211
+ try {
212
+ if (existsSync(A8E_CONFIG_PATH)) {
213
+ existingConfig = readFileSync(A8E_CONFIG_PATH, 'utf-8');
214
+ }
215
+ }
216
+ catch {
217
+ // Fresh config
218
+ }
219
+ // Update or insert provider and model keys
220
+ existingConfig = this.upsertYamlKey(existingConfig, 'A8E_PROVIDER', A8E_DEFAULT_PROVIDER);
221
+ existingConfig = this.upsertYamlKey(existingConfig, 'A8E_MODEL', targetModel);
222
+ writeFileSync(A8E_CONFIG_PATH, existingConfig, 'utf-8');
223
+ // Write the API key to secrets.yaml
224
+ let existingSecrets = '';
225
+ try {
226
+ if (existsSync(A8E_SECRETS_PATH)) {
227
+ existingSecrets = readFileSync(A8E_SECRETS_PATH, 'utf-8');
228
+ }
229
+ }
230
+ catch {
231
+ // Fresh secrets
232
+ }
233
+ existingSecrets = this.upsertYamlKey(existingSecrets, 'PAEAN_AI_API_KEY', apiKey);
234
+ writeFileSync(A8E_SECRETS_PATH, existingSecrets, 'utf-8');
235
+ }
236
+ /**
237
+ * Upsert a key in a simple YAML document (key: value per line).
238
+ */
239
+ upsertYamlKey(content, key, value) {
240
+ const regex = new RegExp(`^${key}:.*$`, 'm');
241
+ const line = `${key}: ${value}`;
242
+ if (regex.test(content)) {
243
+ return content.replace(regex, line);
244
+ }
245
+ if (content.length > 0 && !content.endsWith('\n')) {
246
+ content += '\n';
247
+ }
248
+ return content + line + '\n';
249
+ }
144
250
  abort() {
145
251
  if (this.process) {
146
252
  this.process.kill('SIGTERM');
@@ -148,4 +254,12 @@ export class ArticulateExecutor {
148
254
  }
149
255
  }
150
256
  }
257
+ /** Static helpers for the a8e config directory */
258
+ export const A8E_PATHS = {
259
+ configDir: A8E_CONFIG_DIR,
260
+ configFile: A8E_CONFIG_PATH,
261
+ secretsFile: A8E_SECRETS_PATH,
262
+ defaultProvider: A8E_DEFAULT_PROVIDER,
263
+ defaultModel: A8E_DEFAULT_MODEL,
264
+ };
151
265
  //# sourceMappingURL=articulate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"articulate.js","sourceRoot":"","sources":["../../../src/worker/executors/articulate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"articulate.js","sourceRoot":"","sources":["../../../src/worker/executors/articulate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAI7B,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;AAErC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AACzD,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAE9D,MAAM,oBAAoB,GAAG,UAAU,CAAC;AACxC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAQrD,MAAM,OAAO,kBAAkB;IAClB,IAAI,GAAG,YAAqB,CAAC;IAC9B,OAAO,GAAwB,IAAI,CAAC;IACpC,UAAU,CAAS;IAE3B,YAAY,aAAqB,KAAK;QAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB;QACnB,IAAI,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,CAAC;gBACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC7E,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAE/E,OAAO;oBACH,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,IAAI;oBAClB,UAAU;oBACV,UAAU,EAAE,eAAe;oBAC3B,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;iBAC7B,CAAC;YACN,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO;oBACH,SAAS,EAAE,IAAI;oBACf,YAAY,EAAE,IAAI;oBAClB,UAAU;oBACV,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,2EAA2E;iBAC3F,CAAC;YACN,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,OAAO;gBACH,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,SAAS;gBACrB,KAAK,EAAE,WAAW,IAAI,CAAC,UAAU,8CAA8C;aAClF,CAAC;QACN,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,OAAyB;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAE7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC;YAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAE9C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE;gBACxC,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,GAAG,EAAE,MAAM;gBACX,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aACpC,CAAC,CAAC;YAEH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBAC7B,OAAO,CAAC;wBACJ,OAAO,EAAE,KAAK;wBACd,MAAM,EAAE,MAAM;wBACd,KAAK,EAAE,6BAA6B,OAAO,IAAI;wBAC/C,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;qBACrC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,IAAI,CAAC;gBACf,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,IAAI,CAAC;gBACf,OAAO,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC9B,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAEpB,IAAI,UAA+C,CAAC;gBACpD,IAAI,CAAC;oBACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAChC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACL,WAAW;gBACf,CAAC;gBAED,OAAO,CAAC;oBACJ,OAAO,EAAE,IAAI,KAAK,CAAC;oBACnB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;oBAC9D,QAAQ,EAAE,IAAI,IAAI,SAAS;oBAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBAClC,UAAU;iBACb,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBAEpB,OAAO,CAAC;oBACJ,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,GAAG,CAAC,OAAO;oBAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACrC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,MAAc,EAAE,OAAyB;QACvD,MAAM,IAAI,GAAa,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE5B,IAAI,OAAO,EAAE,aAAa,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,QAAiC;QACjD,MAAM,GAAG,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAElD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEpC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QACjC,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa;QACT,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,IAAI,CAAC;YACD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;gBACvD,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACzD,IAAI,aAAa;oBAAE,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7D,IAAI,UAAU;oBAAE,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,sBAAsB;QAC1B,CAAC;QAED,IAAI,CAAC;YACD,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;gBACxD,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,uBAAuB;QAC3B,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,MAAc,EAAE,KAAc;QAC5C,SAAS,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,MAAM,WAAW,GAAG,KAAK,IAAI,iBAAiB,CAAC;QAE/C,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC;YACD,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC9B,cAAc,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC5D,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,eAAe;QACnB,CAAC;QAED,2CAA2C;QAC3C,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAC1F,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAE9E,aAAa,CAAC,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAExD,oCAAoC;QACpC,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YACD,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC/B,eAAe,GAAG,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,gBAAgB;QACpB,CAAC;QAED,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAClF,aAAa,CAAC,gBAAgB,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,OAAe,EAAE,GAAW,EAAE,KAAa;QAC7D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC;QAEhC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,IAAI,CAAC;QACpB,CAAC;QACD,OAAO,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACxB,CAAC;IACL,CAAC;CACJ;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG;IACrB,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,eAAe,EAAE,oBAAoB;IACrC,YAAY,EAAE,iBAAiB;CAClC,CAAC"}
@@ -38,7 +38,8 @@ export declare class SupervisorAgent {
38
38
  */
39
39
  private parseGroomingResponse;
40
40
  /**
41
- * Local fallback grooming using heuristics
41
+ * Local fallback grooming using heuristics.
42
+ * Articulate (a8e) is the HIGH-PRIORITY executor for all coding/local tasks.
42
43
  */
43
44
  private localGroomTask;
44
45
  /**
@@ -46,7 +47,8 @@ export declare class SupervisorAgent {
46
47
  */
47
48
  private structurePrompt;
48
49
  /**
49
- * Select executor based on task characteristics
50
+ * Select executor based on task characteristics.
51
+ * Articulate (a8e) is preferred for coding/local tasks when available.
50
52
  */
51
53
  selectExecutor(task: TodoItem, availableExecutors: ExecutorType[]): ExecutorType;
52
54
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/worker/supervisor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EACR,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAEjB,kBAAkB,EAErB,MAAM,YAAY,CAAC;AA8CpB;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KACb;IAMN;;;OAGG;IACG,SAAS,CACX,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;KAC1B,GACF,OAAO,CAAC,kBAAkB,CAAC;IAc9B;;OAEG;YACW,cAAc;IAoC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAmEtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,YAAY;IA6BhF;;OAEG;IACG,gBAAgB,CAClB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC;IAa9B;;OAEG;YACW,qBAAqB;IAiEnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACG,cAAc,CAChB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,YAAY,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAgD5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACG,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAaxF;;OAEG;YACW,sBAAsB;IAgGpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACG,mBAAmB,CACrB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,YAAY,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IA6F5B;;OAEG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,iBAAiB,CAAC;IAmG7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACG,cAAc,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,kBAAkB,CAAC;IA6G9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKd;AAKD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAKlB;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
1
+ {"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/worker/supervisor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EACR,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EAEjB,kBAAkB,EAErB,MAAM,YAAY,CAAC;AA8CpB;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,KAAK,CAAU;IACvB,OAAO,CAAC,YAAY,CAAU;gBAElB,OAAO,GAAE;QACjB,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KACb;IAMN;;;OAGG;IACG,SAAS,CACX,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;KAC1B,GACF,OAAO,CAAC,kBAAkB,CAAC;IAc9B;;OAEG;YACW,cAAc;IAoC5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgGtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,YAAY;IAuChF;;OAEG;IACG,gBAAgB,CAClB,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC;IAa9B;;OAEG;YACW,qBAAqB;IAiEnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmC7B;;OAEG;IACG,cAAc,CAChB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,YAAY,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IAgD5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAQ5B;;OAEG;IACG,2BAA2B,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAaxF;;OAEG;YACW,sBAAsB;IAgGpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA+B9B;;OAEG;IACG,mBAAmB,CACrB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,YAAY,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IA6F5B;;OAEG;IACG,aAAa,CACf,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,iBAAiB,CAAC;IAmG7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACG,cAAc,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,kBAAkB,CAAC;IA6G9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,GAAG;CAKd;AAKD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAKlB;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}