Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/cli/doctor/checks/disk-space.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export const checkDiskSpace: CheckFn = async () => {
};
}

if (freeMb <= FAIL_THRESHOLD_MB) {
if (freeMb < FAIL_THRESHOLD_MB) {
return {
id: 'disk-space',
title: 'Disk space',
Expand Down
39 changes: 27 additions & 12 deletions src/journal/task-journal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -406,34 +406,49 @@ export class TaskJournal {
ok: boolean,
): string {
const s = ok ? "✓" : "✗";
let base: string;
switch (tool) {
case "navigate":
return `${s} → ${args.url || "unknown"}`;
base = `${s} → ${args.url || "unknown"}`;
break;
case "read_page":
return `${s} Read page`;
base = `${s} Read page`;
break;
case "interact":
return `${s} Click "${args.description || args.selector || ""}"`;
base = `${s} Click "${args.description || args.selector || ""}"`;
break;
case "fill_form": {
const fields = args.fields as Record<string, unknown> | undefined;
return `${s} Fill form (${fields ? Object.keys(fields).length : 0} fields)`;
base = `${s} Fill form (${fields ? Object.keys(fields).length : 0} fields)`;
break;
}
case "find":
return `${s} Find "${args.description || args.selector || ""}"`;
base = `${s} Find "${args.description || args.selector || ""}"`;
break;
case "javascript_tool":
return `${s} JS eval`;
base = `${s} JS eval`;
break;
case "tabs_create":
return `${s} New tab${args.url ? ` → ${args.url}` : ""}`;
base = `${s} New tab${args.url ? ` → ${args.url}` : ""}`;
break;
case "tabs_close":
return `${s} Close tab`;
base = `${s} Close tab`;
break;
case "oc_stop":
return `${s} Stop OpenChrome`;
base = `${s} Stop OpenChrome`;
break;
case "oc_session_snapshot":
return `${s} Snapshot saved`;
base = `${s} Snapshot saved`;
break;
case "workflow_init":
return `${s} Workflow started`;
base = `${s} Workflow started`;
break;
default:
return `${s} ${tool}`;
base = `${s} ${tool}`;
}
// Append intent label if provided and non-empty (issue #894).
const intent = typeof args.intent === 'string' && args.intent ? args.intent : undefined;
return intent ? `${base} [intent: "${intent}"]` : base;
}

/**
Expand Down
29 changes: 29 additions & 0 deletions src/mcp-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,35 @@ export function estimateOutputTokensFromChars(chars: number): number {
return Math.max(0, Math.ceil(chars / 4));
}

/**
* Summarize an MCPResult for journal recording, stripping injected hint text.
*
* The MCP server injects proactive hint text into both `_hint` and
* `content[]`. This function returns only the "real" content text (the first
* non-hint item), so the journal entry accurately reflects what the tool
* actually returned rather than the augmented hint.
*/
export function summarizeMcpResultForJournal(result: MCPResult): string | undefined {
const content = result.content;
if (!Array.isArray(content)) return undefined;
const injectedHint = typeof (result as Record<string, unknown>)._hint === 'string'
? String((result as Record<string, unknown>)._hint).trim()
: undefined;

const textItems = content
.filter((c) => c.type === 'text' && typeof c.text === 'string')
.map((c) => c.text!.trim());

if (textItems.length === 0) return undefined;

// If a hint was injected, skip any content item whose trimmed text matches it.
const filtered = injectedHint
? textItems.filter((t) => t !== injectedHint)
: textItems;

return filtered[0] ?? textItems[0];
}

function stringifyResultPayload(result: MCPResult): string {
try {
return JSON.stringify(result);
Expand Down
21 changes: 21 additions & 0 deletions src/tools/__tests__/__snapshots__/tools-list.v1.11.snap.json
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,27 @@
{
"name": "oc_task_list"
},
{
"name": "oc_task_run_checkpoint"
},
{
"name": "oc_task_run_complete"
},
{
"name": "oc_task_run_get"
},
{
"name": "oc_task_run_list"
},
{
"name": "oc_task_run_needs_help"
},
{
"name": "oc_task_run_start"
},
{
"name": "oc_task_run_update"
},
{
"name": "oc_task_start"
},
Expand Down
7 changes: 7 additions & 0 deletions src/tools/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@
import { registerOcSkillRecallTool } from './oc-skill-recall';

// Skill memory tools (#875) — deterministic replay
import { registerOcSkillReplayTool } from './oc-skill-replay';

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (ubuntu-latest, 18)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (windows-latest, 18)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (macos-latest, 18)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (windows-latest, 22)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (macos-latest, 20)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (windows-latest, 20)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (ubuntu-latest, 20)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (macos-latest, 22)

'registerOcSkillReplayTool' is defined but never used

Check warning on line 125 in src/tools/index.ts

View workflow job for this annotation

GitHub Actions / build-and-test (ubuntu-latest, 22)

'registerOcSkillReplayTool' is defined but never used
// Async task ledger (#855) — start/list/get/cancel/wait for long-running tools
import { registerOcTaskStartTool, getTaskStore, setTaskStartupReapPromise } from './oc-task-start';
import { registerOcTaskListTool } from './oc-task-list';
Expand Down Expand Up @@ -294,6 +294,13 @@
oc_task_cancel: 'core',
oc_task_get: 'core',
oc_task_list: 'core',
oc_task_run_checkpoint: 'core',
oc_task_run_complete: 'core',
oc_task_run_get: 'core',
oc_task_run_list: 'core',
oc_task_run_needs_help: 'core',
oc_task_run_start: 'core',
oc_task_run_update: 'core',
oc_task_start: 'core',
oc_task_wait: 'core',
};
Expand Down
Loading
Loading