@rubytech/taskmaster 1.24.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/cli-runner/helpers.js +6 -1
- package/dist/agents/cli-runner.js +27 -3
- package/dist/agents/pi-embedded-runner/run/attempt.js +6 -0
- package/dist/agents/system-prompt-log.js +24 -0
- package/dist/build-info.json +3 -3
- package/dist/control-ui/assets/{index-B1bLQjxV.js → index-C1r0QazL.js} +3 -3
- package/dist/control-ui/assets/index-C1r0QazL.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/gateway/server-methods/logs.js +4 -4
- package/dist/logging/logger.js +1 -1
- package/package.json +1 -1
- package/scripts/install.sh +33 -0
- package/taskmaster-docs/USER-GUIDE.md +12 -1
- package/dist/control-ui/assets/index-B1bLQjxV.js.map +0 -1
|
@@ -161,7 +161,7 @@ export function buildSystemPrompt(params) {
|
|
|
161
161
|
},
|
|
162
162
|
});
|
|
163
163
|
const ttsHint = params.config ? buildTtsSystemPromptHint(params.config) : undefined;
|
|
164
|
-
|
|
164
|
+
const prompt = buildAgentSystemPrompt({
|
|
165
165
|
workspaceDir: params.workspaceDir,
|
|
166
166
|
defaultThinkLevel: params.defaultThinkLevel,
|
|
167
167
|
extraSystemPrompt: params.extraSystemPrompt,
|
|
@@ -178,6 +178,11 @@ export function buildSystemPrompt(params) {
|
|
|
178
178
|
contextFiles: params.contextFiles,
|
|
179
179
|
ttsHint,
|
|
180
180
|
});
|
|
181
|
+
return {
|
|
182
|
+
prompt,
|
|
183
|
+
bootstrapFiles: params.bootstrapFiles ?? [],
|
|
184
|
+
skillsPrompt: params.skillsPrompt ?? "",
|
|
185
|
+
};
|
|
181
186
|
}
|
|
182
187
|
export function normalizeCliModel(modelId, backend) {
|
|
183
188
|
const trimmed = modelId.trim();
|
|
@@ -10,7 +10,9 @@ import { makeBootstrapWarn, resolveBootstrapContextForRun } from "./bootstrap-fi
|
|
|
10
10
|
import { resolveCliBackendConfig } from "./cli-backends.js";
|
|
11
11
|
import { appendImagePathsToPrompt, buildCliArgs, buildSystemPrompt, cleanupResumeProcesses, cleanupSuspendedCliProcesses, enqueueCliRun, normalizeCliModel, parseCliJson, parseCliJsonl, resolvePromptInput, resolveSessionIdToSend, resolveSystemPromptUsage, writeCliImages, } from "./cli-runner/helpers.js";
|
|
12
12
|
import { FailoverError, resolveFailoverStatus } from "./failover-error.js";
|
|
13
|
-
import { classifyFailoverReason, isFailoverErrorMessage } from "./pi-embedded-helpers.js";
|
|
13
|
+
import { classifyFailoverReason, isFailoverErrorMessage, resolveBootstrapMaxChars, } from "./pi-embedded-helpers.js";
|
|
14
|
+
import { buildSystemPromptReport } from "./system-prompt-report.js";
|
|
15
|
+
import { writeSystemPromptLog } from "./system-prompt-log.js";
|
|
14
16
|
const log = createSubsystemLogger("agent/claude-cli");
|
|
15
17
|
export async function runCliAgent(params) {
|
|
16
18
|
const started = Date.now();
|
|
@@ -31,7 +33,7 @@ export async function runCliAgent(params) {
|
|
|
31
33
|
.filter(Boolean)
|
|
32
34
|
.join("\n");
|
|
33
35
|
const sessionLabel = params.sessionKey ?? params.sessionId;
|
|
34
|
-
const { contextFiles } = await resolveBootstrapContextForRun({
|
|
36
|
+
const { bootstrapFiles, contextFiles } = await resolveBootstrapContextForRun({
|
|
35
37
|
workspaceDir,
|
|
36
38
|
config: params.config,
|
|
37
39
|
sessionKey: params.sessionKey,
|
|
@@ -51,7 +53,7 @@ export async function runCliAgent(params) {
|
|
|
51
53
|
cwd: process.cwd(),
|
|
52
54
|
moduleUrl: import.meta.url,
|
|
53
55
|
});
|
|
54
|
-
const systemPrompt = buildSystemPrompt({
|
|
56
|
+
const { prompt: systemPrompt, skillsPrompt } = buildSystemPrompt({
|
|
55
57
|
workspaceDir,
|
|
56
58
|
config: params.config,
|
|
57
59
|
defaultThinkLevel: params.thinkLevel,
|
|
@@ -63,7 +65,28 @@ export async function runCliAgent(params) {
|
|
|
63
65
|
contextFiles,
|
|
64
66
|
modelDisplay,
|
|
65
67
|
agentId: sessionAgentId,
|
|
68
|
+
bootstrapFiles,
|
|
66
69
|
});
|
|
70
|
+
const systemPromptReport = buildSystemPromptReport({
|
|
71
|
+
source: "run",
|
|
72
|
+
generatedAt: Date.now(),
|
|
73
|
+
sessionId: params.sessionId,
|
|
74
|
+
sessionKey: params.sessionKey,
|
|
75
|
+
provider: params.provider,
|
|
76
|
+
model: modelId,
|
|
77
|
+
workspaceDir,
|
|
78
|
+
bootstrapMaxChars: resolveBootstrapMaxChars(params.config),
|
|
79
|
+
systemPrompt,
|
|
80
|
+
bootstrapFiles,
|
|
81
|
+
injectedFiles: contextFiles,
|
|
82
|
+
skillsPrompt,
|
|
83
|
+
tools: [],
|
|
84
|
+
});
|
|
85
|
+
// Fire-and-forget: log full system prompt to disk
|
|
86
|
+
const sessionKeyForLog = params.sessionKey ?? params.sessionId;
|
|
87
|
+
if (sessionKeyForLog) {
|
|
88
|
+
writeSystemPromptLog(sessionKeyForLog, systemPrompt).catch(() => { });
|
|
89
|
+
}
|
|
67
90
|
const { sessionId: cliSessionIdToSend, isNew } = resolveSessionIdToSend({
|
|
68
91
|
backend,
|
|
69
92
|
cliSessionId: params.cliSessionId,
|
|
@@ -219,6 +242,7 @@ export async function runCliAgent(params) {
|
|
|
219
242
|
model: modelId,
|
|
220
243
|
usage: output.usage,
|
|
221
244
|
},
|
|
245
|
+
systemPromptReport,
|
|
222
246
|
},
|
|
223
247
|
};
|
|
224
248
|
}
|
|
@@ -32,6 +32,7 @@ import { acquireSessionWriteLock } from "../../session-write-lock.js";
|
|
|
32
32
|
import { applySkillEnvOverrides, applySkillEnvOverridesFromSnapshot, loadWorkspaceSkillEntries, resolveSkillsPromptForRun, } from "../../skills.js";
|
|
33
33
|
import { DEFAULT_BOOTSTRAP_FILENAME } from "../../workspace.js";
|
|
34
34
|
import { buildSystemPromptReport } from "../../system-prompt-report.js";
|
|
35
|
+
import { writeSystemPromptLog } from "../../system-prompt-log.js";
|
|
35
36
|
import { resolveDefaultModelForAgent } from "../../model-selection.js";
|
|
36
37
|
import { isAbortError } from "../abort.js";
|
|
37
38
|
import { buildEmbeddedExtensionPaths } from "../extensions.js";
|
|
@@ -326,6 +327,11 @@ export async function runEmbeddedAttempt(params) {
|
|
|
326
327
|
tools,
|
|
327
328
|
});
|
|
328
329
|
const systemPrompt = createSystemPromptOverride(appendPrompt);
|
|
330
|
+
// Fire-and-forget: log the full system prompt text to disk
|
|
331
|
+
const sessionKeyForLog = params.sessionKey ?? params.sessionId;
|
|
332
|
+
if (sessionKeyForLog) {
|
|
333
|
+
writeSystemPromptLog(sessionKeyForLog, appendPrompt).catch(() => { });
|
|
334
|
+
}
|
|
329
335
|
const sessionLock = await acquireSessionWriteLock({
|
|
330
336
|
sessionFile: params.sessionFile,
|
|
331
337
|
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import fs from "node:fs/promises";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { createSubsystemLogger } from "../logging/subsystem.js";
|
|
5
|
+
const log = createSubsystemLogger("system-prompt-log");
|
|
6
|
+
const DEFAULT_DIR = path.join(os.homedir(), ".taskmaster", "logs", "system-prompts");
|
|
7
|
+
const MAX_KEY_LENGTH = 128;
|
|
8
|
+
export function sanitiseSessionKey(key) {
|
|
9
|
+
const cleaned = key.replace(/[:/\\]/g, "_").trim();
|
|
10
|
+
if (!cleaned)
|
|
11
|
+
return "_unknown_";
|
|
12
|
+
return cleaned.slice(0, MAX_KEY_LENGTH);
|
|
13
|
+
}
|
|
14
|
+
export async function writeSystemPromptLog(sessionKey, systemPrompt, dir = DEFAULT_DIR) {
|
|
15
|
+
try {
|
|
16
|
+
const fileName = `${sanitiseSessionKey(sessionKey)}.txt`;
|
|
17
|
+
await fs.mkdir(dir, { recursive: true });
|
|
18
|
+
await fs.writeFile(path.join(dir, fileName), systemPrompt, "utf-8");
|
|
19
|
+
}
|
|
20
|
+
catch (err) {
|
|
21
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
22
|
+
log.warn(`Failed to write system prompt log: ${message}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
package/dist/build-info.json
CHANGED