deepclause-sdk 0.0.58 → 0.0.60

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 (90) hide show
  1. package/README.md +71 -19
  2. package/dist/cli/compile.d.ts +9 -0
  3. package/dist/cli/compile.d.ts.map +1 -1
  4. package/dist/cli/compile.js +106 -138
  5. package/dist/cli/compile.js.map +1 -1
  6. package/dist/cli/config.d.ts +73 -23
  7. package/dist/cli/config.d.ts.map +1 -1
  8. package/dist/cli/config.js +151 -58
  9. package/dist/cli/config.js.map +1 -1
  10. package/dist/cli/index.js +64 -14
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/interactive.d.ts +2 -0
  13. package/dist/cli/interactive.d.ts.map +1 -0
  14. package/dist/cli/interactive.js +20 -0
  15. package/dist/cli/interactive.js.map +1 -0
  16. package/dist/cli/prompt.d.ts +1 -19
  17. package/dist/cli/prompt.d.ts.map +1 -1
  18. package/dist/cli/prompt.js +1 -869
  19. package/dist/cli/prompt.js.map +1 -1
  20. package/dist/cli/run.d.ts +6 -1
  21. package/dist/cli/run.d.ts.map +1 -1
  22. package/dist/cli/run.js +65 -279
  23. package/dist/cli/run.js.map +1 -1
  24. package/dist/cli/search.d.ts +1 -0
  25. package/dist/cli/search.d.ts.map +1 -1
  26. package/dist/cli/search.js +10 -4
  27. package/dist/cli/search.js.map +1 -1
  28. package/dist/cli/tools.d.ts +2 -2
  29. package/dist/cli/tools.d.ts.map +1 -1
  30. package/dist/cli/tools.js +30 -5
  31. package/dist/cli/tools.js.map +1 -1
  32. package/dist/cli/tui.d.ts +58 -0
  33. package/dist/cli/tui.d.ts.map +1 -0
  34. package/dist/cli/tui.js +1742 -0
  35. package/dist/cli/tui.js.map +1 -0
  36. package/dist/compiler_prompt.d.ts +1 -1
  37. package/dist/compiler_prompt.d.ts.map +1 -1
  38. package/dist/compiler_prompt.js +8 -10
  39. package/dist/compiler_prompt.js.map +1 -1
  40. package/dist/prolog-src/deepclause_mi.pl +25 -4
  41. package/dist/prolog-src/deepclause_strings.pl +22 -2
  42. package/dist/system/assets/docs/CONDUCTOR_PROMPT.md +46 -0
  43. package/dist/system/assets/docs/DML_COMPILER_PROMPT.md +654 -0
  44. package/dist/system/assets/index.d.ts +9 -0
  45. package/dist/system/assets/index.d.ts.map +1 -0
  46. package/dist/system/assets/index.js +47 -0
  47. package/dist/system/assets/index.js.map +1 -0
  48. package/dist/system/assets/skills/conductor.dml +70 -0
  49. package/dist/system/assets/skills/skill-creator.dml +182 -0
  50. package/dist/system/config/model-slots.d.ts +34 -0
  51. package/dist/system/config/model-slots.d.ts.map +1 -0
  52. package/dist/system/config/model-slots.js +121 -0
  53. package/dist/system/config/model-slots.js.map +1 -0
  54. package/dist/system/runtime/agentvm-manager.d.ts +18 -0
  55. package/dist/system/runtime/agentvm-manager.d.ts.map +1 -0
  56. package/dist/system/runtime/agentvm-manager.js +98 -0
  57. package/dist/system/runtime/agentvm-manager.js.map +1 -0
  58. package/dist/system/runtime/conductor.d.ts +54 -0
  59. package/dist/system/runtime/conductor.d.ts.map +1 -0
  60. package/dist/system/runtime/conductor.js +457 -0
  61. package/dist/system/runtime/conductor.js.map +1 -0
  62. package/dist/system/runtime/console-capture.d.ts +9 -0
  63. package/dist/system/runtime/console-capture.d.ts.map +1 -0
  64. package/dist/system/runtime/console-capture.js +67 -0
  65. package/dist/system/runtime/console-capture.js.map +1 -0
  66. package/dist/system/runtime/dml-executor.d.ts +41 -0
  67. package/dist/system/runtime/dml-executor.d.ts.map +1 -0
  68. package/dist/system/runtime/dml-executor.js +137 -0
  69. package/dist/system/runtime/dml-executor.js.map +1 -0
  70. package/dist/system/runtime/runtime-tools.d.ts +16 -0
  71. package/dist/system/runtime/runtime-tools.d.ts.map +1 -0
  72. package/dist/system/runtime/runtime-tools.js +146 -0
  73. package/dist/system/runtime/runtime-tools.js.map +1 -0
  74. package/dist/system/runtime/shell-manager.d.ts +20 -0
  75. package/dist/system/runtime/shell-manager.d.ts.map +1 -0
  76. package/dist/system/runtime/shell-manager.js +133 -0
  77. package/dist/system/runtime/shell-manager.js.map +1 -0
  78. package/dist/system/runtime/skill-creator.d.ts +33 -0
  79. package/dist/system/runtime/skill-creator.d.ts.map +1 -0
  80. package/dist/system/runtime/skill-creator.js +583 -0
  81. package/dist/system/runtime/skill-creator.js.map +1 -0
  82. package/dist/system/runtime/token-usage.d.ts +16 -0
  83. package/dist/system/runtime/token-usage.d.ts.map +1 -0
  84. package/dist/system/runtime/token-usage.js +45 -0
  85. package/dist/system/runtime/token-usage.js.map +1 -0
  86. package/dist/tools.js +1 -1
  87. package/dist/tools.js.map +1 -1
  88. package/package.json +4 -3
  89. package/src/prolog-src/deepclause_mi.pl +25 -4
  90. package/src/prolog-src/deepclause_strings.pl +22 -2
@@ -0,0 +1,54 @@
1
+ import { type Config } from '../../cli/config.js';
2
+ import type { DMLEvent } from '../../types.js';
3
+ import { type TokenUsageByModel } from './token-usage.js';
4
+ export interface ConductorSessionSummary {
5
+ id: string;
6
+ title: string;
7
+ createdAt: string;
8
+ updatedAt: string;
9
+ }
10
+ export interface ConductorSessionMessage {
11
+ role: 'user' | 'assistant';
12
+ content: string;
13
+ timestamp: string;
14
+ }
15
+ export interface ConductorSessionDetail extends ConductorSessionSummary {
16
+ messages: ConductorSessionMessage[];
17
+ assistantMemory: string;
18
+ taskMemory: string;
19
+ usageByModel?: TokenUsageByModel;
20
+ }
21
+ export interface ConductorTurnOptions {
22
+ sessionId?: string;
23
+ sessionTitle?: string;
24
+ workspaceRoot?: string;
25
+ workspacePath?: string;
26
+ config?: Config;
27
+ verbose?: boolean;
28
+ trace?: boolean;
29
+ gasLimit?: number;
30
+ stream?: boolean;
31
+ headless?: boolean;
32
+ sandbox?: boolean;
33
+ signal?: AbortSignal;
34
+ onUserInput?: (prompt: string) => Promise<string>;
35
+ onEvent?: (event: ConductorLogEvent) => void;
36
+ }
37
+ export interface ConductorTurnResult {
38
+ sessionId: string;
39
+ output: string[];
40
+ answer?: string;
41
+ error?: string;
42
+ trace?: object;
43
+ }
44
+ export interface ConductorLogEvent {
45
+ scope: 'main' | 'child';
46
+ childSlug?: string;
47
+ modelId?: string;
48
+ event: DMLEvent;
49
+ }
50
+ export declare function listConductorSessions(workspaceRoot?: string): Promise<ConductorSessionSummary[]>;
51
+ export declare function createConductorSession(workspaceRoot?: string, title?: string): Promise<ConductorSessionSummary>;
52
+ export declare function getConductorSessionDetail(workspaceRoot: string | undefined, sessionId: string): Promise<ConductorSessionDetail>;
53
+ export declare function runConductorTurn(userMessage: string, options?: ConductorTurnOptions): Promise<ConductorTurnResult>;
54
+ //# sourceMappingURL=conductor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conductor.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/conductor.ts"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,MAAM,EACZ,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,gBAAgB,CAAC;AAI9D,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAkC1B,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACrE,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED,wBAAsB,qBAAqB,CAAC,aAAa,SAAgB,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAiB7G;AAED,wBAAsB,sBAAsB,CAC1C,aAAa,SAAgB,EAC7B,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAiBlC;AAED,wBAAsB,yBAAyB,CAC7C,aAAa,oBAAgB,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC,CAejC;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,mBAAmB,CAAC,CAwF9B"}
@@ -0,0 +1,457 @@
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
+ import { randomUUID } from 'crypto';
4
+ import { listCommands } from '../../cli/commands.js';
5
+ import { getConfigDir, getToolsDir, loadConfig, resolveModelSlot, } from '../../cli/config.js';
6
+ import { promptUser } from '../../cli/interactive.js';
7
+ import { run } from '../../cli/run.js';
8
+ import { readSystemPromptAsset, readSystemSkillAsset } from '../assets/index.js';
9
+ import { executeDml } from './dml-executor.js';
10
+ import { compileWithSkillCreator } from './skill-creator.js';
11
+ import { isTokenUsageEmpty, mergeTokenUsageMaps, recordTokenUsage, } from './token-usage.js';
12
+ const DEFAULT_SESSION_TITLE_PREFIX = 'Session';
13
+ export async function listConductorSessions(workspaceRoot = process.cwd()) {
14
+ const sessionsDir = getSessionsDir(workspaceRoot);
15
+ try {
16
+ const entries = await fs.readdir(sessionsDir, { withFileTypes: true });
17
+ const sessions = await Promise.all(entries
18
+ .filter((entry) => entry.isDirectory())
19
+ .map(async (entry) => readSessionMetadata(path.join(sessionsDir, entry.name))));
20
+ return sessions
21
+ .filter((session) => session !== null)
22
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
23
+ }
24
+ catch (error) {
25
+ if (error.code === 'ENOENT') {
26
+ return [];
27
+ }
28
+ throw error;
29
+ }
30
+ }
31
+ export async function createConductorSession(workspaceRoot = process.cwd(), title) {
32
+ const now = new Date().toISOString();
33
+ const metadata = {
34
+ id: randomUUID(),
35
+ title: title?.trim() || `${DEFAULT_SESSION_TITLE_PREFIX} ${now.slice(0, 16).replace('T', ' ')}`,
36
+ createdAt: now,
37
+ updatedAt: now,
38
+ };
39
+ const paths = getSessionPaths(workspaceRoot, metadata.id);
40
+ await fs.mkdir(paths.dir, { recursive: true });
41
+ await fs.writeFile(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n', 'utf8');
42
+ await fs.writeFile(paths.messagesPath, '', 'utf8');
43
+ await fs.writeFile(paths.assistantMemoryPath, '', 'utf8');
44
+ await fs.writeFile(paths.taskMemoryPath, '', 'utf8');
45
+ await fs.writeFile(paths.usagePath, '{}\n', 'utf8');
46
+ return metadata;
47
+ }
48
+ export async function getConductorSessionDetail(workspaceRoot = process.cwd(), sessionId) {
49
+ const paths = getSessionPaths(workspaceRoot, sessionId);
50
+ const metadata = await readRequiredSessionMetadata(paths.dir);
51
+ const messages = await readSessionMessages(paths.messagesPath);
52
+ const assistantMemory = await readOptionalText(paths.assistantMemoryPath);
53
+ const taskMemory = await readOptionalText(paths.taskMemoryPath);
54
+ const usageByModel = await readSessionUsage(paths.usagePath);
55
+ return {
56
+ ...metadata,
57
+ messages,
58
+ assistantMemory,
59
+ taskMemory,
60
+ usageByModel,
61
+ };
62
+ }
63
+ export async function runConductorTurn(userMessage, options = {}) {
64
+ const workspaceRoot = path.resolve(options.workspaceRoot ?? process.cwd());
65
+ const config = options.config ?? await loadConfig(workspaceRoot);
66
+ const workspacePath = path.resolve(options.workspacePath ?? config.workspace ?? './workspace');
67
+ await fs.mkdir(workspacePath, { recursive: true });
68
+ const session = await loadOrCreateSession(workspaceRoot, options.sessionId, options.sessionTitle);
69
+ const gatewaySelection = resolveModelSlot(config, 'gateway');
70
+ const compileSelection = resolveModelSlot(config, 'compile');
71
+ const runSelection = resolveModelSlot(config, 'run');
72
+ const systemPrompt = await buildConductorSystemPrompt({
73
+ workspaceRoot,
74
+ workspacePath,
75
+ session,
76
+ gatewayModelId: gatewaySelection.id,
77
+ compileModelId: compileSelection.id,
78
+ runModelId: runSelection.id,
79
+ });
80
+ const conductorDml = await readSystemSkillAsset('conductor', { workspaceRoot });
81
+ const onUserInput = options.onUserInput ?? promptUser;
82
+ const usageByModel = {};
83
+ const emitLogEvent = (event) => {
84
+ if (event.event.type === 'usage') {
85
+ recordTokenUsage(usageByModel, event.modelId, event.event.usage);
86
+ }
87
+ options.onEvent?.(event);
88
+ };
89
+ const result = await executeDml({
90
+ dmlCode: conductorDml,
91
+ config,
92
+ workspacePath,
93
+ selection: gatewaySelection,
94
+ args: [userMessage],
95
+ params: {
96
+ system_prompt: systemPrompt,
97
+ },
98
+ gasLimit: options.gasLimit ?? 320,
99
+ verbose: options.verbose,
100
+ headless: options.headless ?? true,
101
+ stream: options.stream ?? false,
102
+ trace: options.trace,
103
+ sandbox: options.sandbox,
104
+ signal: options.signal,
105
+ onUserInput,
106
+ initialMessages: session.messages,
107
+ onEvent: (event) => emitLogEvent({ scope: 'main', modelId: gatewaySelection.id, event }),
108
+ registerAdditionalTools: async (sdk, context) => registerConductorTools(sdk, context, {
109
+ workspaceRoot,
110
+ workspacePath,
111
+ session,
112
+ config,
113
+ compileSelection,
114
+ runSelection,
115
+ stream: options.stream ?? false,
116
+ verbose: options.verbose,
117
+ sandbox: options.sandbox ?? false,
118
+ signal: options.signal,
119
+ onUserInput,
120
+ onEvent: emitLogEvent,
121
+ }),
122
+ });
123
+ await maybeUpdateSessionTitle(workspaceRoot, session.metadata, userMessage);
124
+ await appendSessionMessage(session.paths.messagesPath, {
125
+ role: 'user',
126
+ content: userMessage,
127
+ timestamp: new Date().toISOString(),
128
+ });
129
+ const assistantContent = result.answer ?? result.error;
130
+ if (assistantContent) {
131
+ await appendSessionMessage(session.paths.messagesPath, {
132
+ role: 'assistant',
133
+ content: assistantContent,
134
+ timestamp: new Date().toISOString(),
135
+ });
136
+ }
137
+ await mergeSessionUsage(workspaceRoot, session.metadata.id, usageByModel);
138
+ await touchSession(workspaceRoot, session.metadata.id);
139
+ return {
140
+ sessionId: session.metadata.id,
141
+ output: result.output,
142
+ answer: result.answer,
143
+ error: result.error,
144
+ trace: result.trace,
145
+ };
146
+ }
147
+ async function registerConductorTools(sdk, _context, options) {
148
+ sdk.registerTool('run_skill', {
149
+ description: 'Run an existing local CLI skill from the .deepclause/tools catalog.',
150
+ parameters: {
151
+ type: 'object',
152
+ properties: {
153
+ slug: { type: 'string', description: 'Skill slug from the local tools directory.' },
154
+ args: { type: 'array', description: 'Optional array of string arguments.' },
155
+ },
156
+ required: ['slug'],
157
+ },
158
+ execute: async (args) => runCatalogSkill(options.workspaceRoot, options.workspacePath, options.runSelection.id, options.stream, options.verbose, options.sandbox, options.signal, options.onUserInput, options.onEvent, args),
159
+ });
160
+ sdk.registerTool('create_skill', {
161
+ description: 'Create and publish a new local CLI skill into .deepclause/tools.',
162
+ parameters: {
163
+ type: 'object',
164
+ properties: {
165
+ spec: { type: 'string', description: 'Natural-language skill specification.' },
166
+ },
167
+ required: ['spec'],
168
+ },
169
+ execute: async (args) => createLocalSkill({
170
+ spec: String(args.spec ?? ''),
171
+ workspaceRoot: options.workspaceRoot,
172
+ workspacePath: options.workspacePath,
173
+ config: options.config,
174
+ compileSelection: options.compileSelection,
175
+ runSelection: options.runSelection,
176
+ sessionId: options.session.metadata.id,
177
+ verbose: options.verbose,
178
+ sandbox: options.sandbox,
179
+ signal: options.signal,
180
+ onUserInput: options.onUserInput,
181
+ onEvent: options.onEvent,
182
+ }),
183
+ });
184
+ sdk.registerTool('update_memory', {
185
+ description: 'Replace the current task memory markdown for this conductor session.',
186
+ parameters: {
187
+ type: 'object',
188
+ properties: {
189
+ content: { type: 'string', description: 'Complete updated task memory markdown.' },
190
+ },
191
+ required: ['content'],
192
+ },
193
+ execute: async (args) => updateTaskMemory(options.session.paths.taskMemoryPath, String(args.content ?? '')),
194
+ });
195
+ }
196
+ async function runCatalogSkill(workspaceRoot, workspacePath, modelId, stream, verbose, sandbox, signal, onUserInput, onEvent, args) {
197
+ const slug = String(args.slug ?? '');
198
+ if (!slug) {
199
+ throw new Error('slug is required');
200
+ }
201
+ if (slug === 'conductor' || slug === '_conductor') {
202
+ throw new Error('run_skill cannot recursively invoke the conductor');
203
+ }
204
+ const skillPath = path.join(getToolsDir(workspaceRoot), slug);
205
+ const skillArgs = normalizeStringArray(args.args);
206
+ const result = await run(skillPath, skillArgs, {
207
+ configRoot: workspaceRoot,
208
+ workspace: workspacePath,
209
+ headless: true,
210
+ stream,
211
+ verbose,
212
+ model: modelId,
213
+ sandbox,
214
+ signal,
215
+ onUserInput,
216
+ onEvent: (event) => onEvent?.({ scope: 'child', childSlug: slug, modelId, event }),
217
+ });
218
+ return {
219
+ success: !result.error,
220
+ answer: result.answer,
221
+ output: result.output,
222
+ error: result.error,
223
+ };
224
+ }
225
+ async function createLocalSkill(options) {
226
+ if (!options.spec.trim()) {
227
+ throw new Error('spec is required');
228
+ }
229
+ const slug = deriveSkillSlug(options.spec);
230
+ const specDir = path.join(getSessionPaths(options.workspaceRoot, options.sessionId).dir, 'specs');
231
+ const specPath = path.join(specDir, `${slug}.md`);
232
+ await fs.mkdir(specDir, { recursive: true });
233
+ await fs.writeFile(specPath, options.spec, 'utf8');
234
+ const result = await compileWithSkillCreator(options.spec, {
235
+ sourcePath: specPath,
236
+ outputDir: getToolsDir(options.workspaceRoot),
237
+ baseName: slug,
238
+ workspaceRoot: options.workspaceRoot,
239
+ workspacePath: options.workspacePath,
240
+ config: options.config,
241
+ compileSelection: options.compileSelection,
242
+ runSelection: options.runSelection,
243
+ sandbox: options.sandbox,
244
+ verbose: options.verbose,
245
+ signal: options.signal,
246
+ onUserInput: options.onUserInput,
247
+ onEvent: (event) => options.onEvent?.({
248
+ scope: 'child',
249
+ childSlug: 'skill-creator',
250
+ modelId: options.compileSelection.id,
251
+ event,
252
+ }),
253
+ });
254
+ await mergeSessionUsage(options.workspaceRoot, options.sessionId, result.usageByModel);
255
+ return {
256
+ success: true,
257
+ slug,
258
+ output_path: result.outputPath,
259
+ description: result.meta.description,
260
+ tools: result.tools,
261
+ };
262
+ }
263
+ async function updateTaskMemory(taskMemoryPath, content) {
264
+ await fs.writeFile(taskMemoryPath, content, 'utf8');
265
+ return {
266
+ success: true,
267
+ path: taskMemoryPath,
268
+ bytes: content.length,
269
+ };
270
+ }
271
+ async function buildConductorSystemPrompt(options) {
272
+ const template = await readSystemPromptAsset('conductor');
273
+ const commands = await listCommands(options.workspaceRoot, { detailed: false });
274
+ const catalog = commands.length > 0
275
+ ? commands.map((command) => `- ${command.name}: ${command.description}`).join('\n')
276
+ : '- No compiled local skills are available yet.';
277
+ const assistantMemory = options.session.assistantMemory.trim() || 'No assistant memory recorded yet.';
278
+ const taskMemory = options.session.taskMemory.trim() || 'No task memory recorded yet.';
279
+ const localContext = [
280
+ '## Local CLI Runtime',
281
+ `- Workspace root: ${options.workspaceRoot}`,
282
+ `- Working directory for tools: ${options.workspacePath}`,
283
+ `- Skill catalog: ${getToolsDir(options.workspaceRoot)}`,
284
+ `- Session directory: ${options.session.paths.dir}`,
285
+ `- Gateway model: ${options.gatewayModelId}`,
286
+ `- Run model: ${options.runModelId}`,
287
+ `- Compile model: ${options.compileModelId}`,
288
+ '- There is exactly one conductor in the CLI runtime. Do not invent hidden workers or extra orchestration layers.',
289
+ '',
290
+ '## Local Skill Catalog',
291
+ catalog,
292
+ '',
293
+ '## Assistant Memory',
294
+ assistantMemory,
295
+ '',
296
+ '## Task Memory',
297
+ taskMemory,
298
+ ].join('\n');
299
+ return `${template
300
+ .replace('{ASSISTANT_NAME}', 'DeepClause')}\n\n${localContext}`;
301
+ }
302
+ async function loadOrCreateSession(workspaceRoot, sessionId, sessionTitle) {
303
+ if (!sessionId) {
304
+ const created = await createConductorSession(workspaceRoot, sessionTitle);
305
+ return loadSession(workspaceRoot, created.id);
306
+ }
307
+ return loadSession(workspaceRoot, sessionId);
308
+ }
309
+ async function loadSession(workspaceRoot, sessionId) {
310
+ const paths = getSessionPaths(workspaceRoot, sessionId);
311
+ const metadata = await readRequiredSessionMetadata(paths.dir);
312
+ const messages = await readSessionMessages(paths.messagesPath);
313
+ const assistantMemory = await readOptionalText(paths.assistantMemoryPath);
314
+ const taskMemory = await readOptionalText(paths.taskMemoryPath);
315
+ return {
316
+ metadata,
317
+ paths,
318
+ messages: messages.map((message) => ({ role: message.role, content: message.content })),
319
+ assistantMemory,
320
+ taskMemory,
321
+ };
322
+ }
323
+ function getSessionsDir(workspaceRoot) {
324
+ return path.join(getConfigDir(workspaceRoot), 'sessions');
325
+ }
326
+ function getSessionPaths(workspaceRoot, sessionId) {
327
+ const dir = path.join(getSessionsDir(workspaceRoot), sessionId);
328
+ return {
329
+ dir,
330
+ metadataPath: path.join(dir, 'session.json'),
331
+ messagesPath: path.join(dir, 'messages.jsonl'),
332
+ assistantMemoryPath: path.join(dir, 'assistant-memory.md'),
333
+ taskMemoryPath: path.join(dir, 'task-memory.md'),
334
+ usagePath: path.join(dir, 'usage.json'),
335
+ };
336
+ }
337
+ async function readSessionMetadata(sessionDir) {
338
+ try {
339
+ const content = await fs.readFile(path.join(sessionDir, 'session.json'), 'utf8');
340
+ return JSON.parse(content);
341
+ }
342
+ catch {
343
+ return null;
344
+ }
345
+ }
346
+ async function readRequiredSessionMetadata(sessionDir) {
347
+ const metadata = await readSessionMetadata(sessionDir);
348
+ if (!metadata) {
349
+ throw new Error(`Unknown conductor session: ${path.basename(sessionDir)}`);
350
+ }
351
+ return metadata;
352
+ }
353
+ async function readSessionMessages(messagesPath) {
354
+ const content = await readOptionalText(messagesPath);
355
+ if (!content.trim()) {
356
+ return [];
357
+ }
358
+ return content
359
+ .split('\n')
360
+ .map((line) => line.trim())
361
+ .filter(Boolean)
362
+ .map((line) => JSON.parse(line))
363
+ .filter((message) => message.role === 'user' || message.role === 'assistant');
364
+ }
365
+ async function readSessionUsage(usagePath) {
366
+ const content = await readOptionalText(usagePath);
367
+ if (!content.trim()) {
368
+ return {};
369
+ }
370
+ try {
371
+ const parsed = JSON.parse(content);
372
+ return parsed && typeof parsed === 'object' ? parsed : {};
373
+ }
374
+ catch {
375
+ return {};
376
+ }
377
+ }
378
+ async function appendSessionMessage(messagesPath, message) {
379
+ await fs.appendFile(messagesPath, JSON.stringify(message) + '\n', 'utf8');
380
+ }
381
+ async function mergeSessionUsage(workspaceRoot, sessionId, delta) {
382
+ if (isTokenUsageEmpty(delta)) {
383
+ return;
384
+ }
385
+ const paths = getSessionPaths(workspaceRoot, sessionId);
386
+ const current = await readSessionUsage(paths.usagePath);
387
+ const merged = mergeTokenUsageMaps(current, delta);
388
+ await fs.writeFile(paths.usagePath, JSON.stringify(merged, null, 2) + '\n', 'utf8');
389
+ }
390
+ async function touchSession(workspaceRoot, sessionId) {
391
+ const paths = getSessionPaths(workspaceRoot, sessionId);
392
+ const metadata = await readRequiredSessionMetadata(paths.dir);
393
+ metadata.updatedAt = new Date().toISOString();
394
+ await fs.writeFile(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n', 'utf8');
395
+ }
396
+ async function maybeUpdateSessionTitle(workspaceRoot, metadata, userMessage) {
397
+ if (!metadata.title.startsWith(DEFAULT_SESSION_TITLE_PREFIX)) {
398
+ return;
399
+ }
400
+ const nextTitle = summarizeTitle(userMessage);
401
+ if (!nextTitle) {
402
+ return;
403
+ }
404
+ const paths = getSessionPaths(workspaceRoot, metadata.id);
405
+ metadata.title = nextTitle;
406
+ metadata.updatedAt = new Date().toISOString();
407
+ await fs.writeFile(paths.metadataPath, JSON.stringify(metadata, null, 2) + '\n', 'utf8');
408
+ }
409
+ function normalizeStringArray(value) {
410
+ if (Array.isArray(value)) {
411
+ return value.map((entry) => String(entry));
412
+ }
413
+ if (typeof value === 'string' && value.trim()) {
414
+ try {
415
+ const parsed = JSON.parse(value);
416
+ if (Array.isArray(parsed)) {
417
+ return parsed.map((entry) => String(entry));
418
+ }
419
+ }
420
+ catch {
421
+ return [value];
422
+ }
423
+ return [value];
424
+ }
425
+ return [];
426
+ }
427
+ function deriveSkillSlug(spec) {
428
+ const heading = spec.match(/^#\s+(.+)$/m)?.[1];
429
+ const named = spec.match(/(?:called|named)\s+["']?([A-Za-z0-9 _-]{3,40})["']?/i)?.[1];
430
+ const firstLine = spec.split('\n').map((line) => line.trim()).find(Boolean);
431
+ const seed = heading ?? named ?? firstLine ?? `skill ${Date.now()}`;
432
+ return slugify(seed);
433
+ }
434
+ function slugify(value) {
435
+ const slug = value
436
+ .toLowerCase()
437
+ .replace(/[^a-z0-9]+/g, '-')
438
+ .replace(/^-+|-+$/g, '')
439
+ .slice(0, 48);
440
+ return slug || `skill-${Date.now().toString(36)}`;
441
+ }
442
+ function summarizeTitle(message) {
443
+ const normalized = message.replace(/\s+/g, ' ').trim();
444
+ if (!normalized) {
445
+ return '';
446
+ }
447
+ return normalized.slice(0, 60);
448
+ }
449
+ async function readOptionalText(filePath) {
450
+ try {
451
+ return await fs.readFile(filePath, 'utf8');
452
+ }
453
+ catch {
454
+ return '';
455
+ }
456
+ }
457
+ //# sourceMappingURL=conductor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../src/system/runtime/conductor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type CapturedConsoleLevel = 'log' | 'warn' | 'error';
2
+ export interface CapturedConsoleEntry {
3
+ level: CapturedConsoleLevel;
4
+ text: string;
5
+ }
6
+ type ConsoleSink = (entry: CapturedConsoleEntry) => void;
7
+ export declare function withCapturedConsole<T>(sink: ConsoleSink, run: () => Promise<T> | T): Promise<T>;
8
+ export {};
9
+ //# sourceMappingURL=console-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-capture.d.ts","sourceRoot":"","sources":["../../../src/system/runtime/console-capture.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,oBAAoB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;AAWzD,wBAAsB,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAgBrG"}
@@ -0,0 +1,67 @@
1
+ import { inspect } from 'util';
2
+ const originalConsole = {
3
+ log: console.log,
4
+ warn: console.warn,
5
+ error: console.error,
6
+ };
7
+ const sinks = [];
8
+ let installed = false;
9
+ export async function withCapturedConsole(sink, run) {
10
+ installConsoleCapture();
11
+ sinks.push(sink);
12
+ try {
13
+ return await run();
14
+ }
15
+ finally {
16
+ const index = sinks.lastIndexOf(sink);
17
+ if (index >= 0) {
18
+ sinks.splice(index, 1);
19
+ }
20
+ if (sinks.length === 0) {
21
+ uninstallConsoleCapture();
22
+ }
23
+ }
24
+ }
25
+ function installConsoleCapture() {
26
+ if (installed) {
27
+ return;
28
+ }
29
+ console.log = (...args) => dispatch('log', args);
30
+ console.warn = (...args) => dispatch('warn', args);
31
+ console.error = (...args) => dispatch('error', args);
32
+ installed = true;
33
+ }
34
+ function uninstallConsoleCapture() {
35
+ if (!installed) {
36
+ return;
37
+ }
38
+ console.log = originalConsole.log;
39
+ console.warn = originalConsole.warn;
40
+ console.error = originalConsole.error;
41
+ installed = false;
42
+ }
43
+ function dispatch(level, args) {
44
+ const sink = sinks[sinks.length - 1];
45
+ if (!sink) {
46
+ originalConsole[level](...args);
47
+ return;
48
+ }
49
+ sink({
50
+ level,
51
+ text: formatConsoleArgs(args),
52
+ });
53
+ }
54
+ function formatConsoleArgs(args) {
55
+ return args.map((arg) => {
56
+ if (typeof arg === 'string') {
57
+ return arg;
58
+ }
59
+ return inspect(arg, {
60
+ colors: false,
61
+ depth: 5,
62
+ breakLength: Infinity,
63
+ maxArrayLength: 50,
64
+ });
65
+ }).join(' ');
66
+ }
67
+ //# sourceMappingURL=console-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-capture.js","sourceRoot":"","sources":["../../../src/system/runtime/console-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAW/B,MAAM,eAAe,GAAG;IACtB,GAAG,EAAE,OAAO,CAAC,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,KAAK,EAAE,OAAO,CAAC,KAAK;CACrB,CAAC;AAEF,MAAM,KAAK,GAAkB,EAAE,CAAC;AAChC,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAI,IAAiB,EAAE,GAAyB;IACvF,qBAAqB,EAAE,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,EAAE,CAAC;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,uBAAuB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB;IAC5B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,CAAC,IAAI,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChE,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB;IAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC;IAClC,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;IACpC,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC;IACtC,SAAS,GAAG,KAAK,CAAC;AACpB,CAAC;AAED,SAAS,QAAQ,CAAC,KAA2B,EAAE,IAAe;IAC5D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,KAAK;QACL,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;KAC9B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAe;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,EAAE;YAClB,MAAM,EAAE,KAAK;YACb,KAAK,EAAE,CAAC;YACR,WAAW,EAAE,QAAQ;YACrB,cAAc,EAAE,EAAE;SACnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}