@runfusion/fusion 0.28.0 → 0.29.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/bin.js +3126 -1051
- package/dist/client/assets/AgentDetailView-CWyOv8HJ.js +18 -0
- package/dist/client/assets/{AgentDetailView-DSpIqBOs.css → AgentDetailView-ChIKbcEi.css} +1 -1
- package/dist/client/assets/AgentsView-BI_CESkd.css +1 -0
- package/dist/client/assets/AgentsView-DljrBNE1.js +34 -0
- package/dist/client/assets/ChatView-BklDUi5_.js +1 -0
- package/dist/client/assets/{DevServerView-Diw4hjw0.js → DevServerView-BqcI1wXr.js} +1 -1
- package/dist/client/assets/{DirectoryPicker-CWSApoLU.js → DirectoryPicker-Bb3TIWEa.js} +1 -1
- package/dist/client/assets/{DocumentsView-1kr0dhsV.js → DocumentsView-BhrdTTh3.js} +1 -1
- package/dist/client/assets/{EvalsView-cDfXYiK6.js → EvalsView-DrFp2cLg.js} +1 -1
- package/dist/client/assets/{ExperimentalAgentOnboardingModal-lNSf6UtY.js → ExperimentalAgentOnboardingModal-AsmRLMxm.js} +1 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-BNpveCEk.css +1 -0
- package/dist/client/assets/{InsightsView-D2AjxOnu.js → InsightsView-j7J_vUME.js} +1 -1
- package/dist/client/assets/{MemoryView-Dq4yjIPI.js → MemoryView-QWiqVDuQ.js} +2 -2
- package/dist/client/assets/{NodesView-Cpmkze7n.js → NodesView-Cr4CXr7b.js} +1 -1
- package/dist/client/assets/{PiExtensionsManager-oi9FHT0y.js → PiExtensionsManager-CPZ-82Wl.js} +2 -2
- package/dist/client/assets/PluginManager-BJQXdUmV.css +1 -0
- package/dist/client/assets/{PluginManager-o12KG4e8.js → PluginManager-DShC4UiM.js} +1 -1
- package/dist/client/assets/{ResearchView-C9bjVB7-.js → ResearchView-B5wYC1KE.js} +1 -1
- package/dist/client/assets/{SettingsModal-CT01a5Rh.js → SettingsModal-8l8vfXns.js} +1 -1
- package/dist/client/assets/SettingsModal-BAx4gt2A.css +1 -0
- package/dist/client/assets/SettingsModal-CYetgxZj.js +31 -0
- package/dist/client/assets/SettingsModal-ChnabMhF.css +1 -0
- package/dist/client/assets/{SetupWizardModal-Agi3XNtZ.js → SetupWizardModal-_IK6hTA7.js} +1 -1
- package/dist/client/assets/SkillsView-CUbSBeZ2.css +1 -0
- package/dist/client/assets/{SkillsView-DmZfbGLs.js → SkillsView-Dilmj1nh.js} +1 -1
- package/dist/client/assets/{StashRecoveryView-BwKJQaUW.js → StashRecoveryView-BtL9aAn3.js} +1 -1
- package/dist/client/assets/{TodoView-uJRg4Cnl.js → TodoView-rSn0aPsb.js} +1 -1
- package/dist/client/assets/{dashboard-view-C7Snlgow.js → dashboard-view-C_G8JVU7.js} +1 -1
- package/dist/client/assets/{folder-open-DU-Ec_iC.js → folder-open-Bq_TweLR.js} +1 -1
- package/dist/client/assets/index-DjfAYMGG.css +1 -0
- package/dist/client/assets/index-tbwUVj8p.js +696 -0
- package/dist/client/assets/{star-Qi0GspVN.js → star-Dn0V0Cnq.js} +1 -1
- package/dist/client/assets/{upload-Dx_l9Vbu.js → upload-D1y22Www.js} +1 -1
- package/dist/client/assets/{users-3Qw_TMah.js → users-UQdBpweI.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/client/version.json +1 -1
- package/dist/droid-cli/package.json +1 -1
- package/dist/extension.js +2499 -656
- package/dist/pi-claude-cli/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/package.json +1 -1
- package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/registration.test.ts +20 -3
- package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/workflow-integration.test.ts +103 -8
- package/dist/plugins/fusion-plugin-cli-printing-press/src/index.ts +4 -0
- package/dist/plugins/fusion-plugin-cli-printing-press/src/workflow-steps.ts +14 -0
- package/dist/plugins/fusion-plugin-cursor-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-dependency-graph/package.json +1 -1
- package/dist/plugins/fusion-plugin-droid-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-hermes-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-openclaw-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-paperclip-runtime/package.json +1 -1
- package/dist/plugins/fusion-plugin-reports/package.json +1 -1
- package/dist/plugins/fusion-plugin-roadmap/package.json +1 -1
- package/dist/plugins/fusion-plugin-whatsapp-chat/package.json +1 -1
- package/package.json +1 -1
- package/skill/fusion/references/extension-tools.md +5 -5
- package/skill/fusion/references/fusion-capabilities.md +5 -5
- package/dist/client/assets/AgentDetailView-V32TpEe1.js +0 -18
- package/dist/client/assets/AgentsView-B3ADnF0D.css +0 -1
- package/dist/client/assets/AgentsView-CxITZE-U.js +0 -34
- package/dist/client/assets/ChatView-7WPHyB_7.js +0 -1
- package/dist/client/assets/ExperimentalAgentOnboardingModal-B-APN_lM.css +0 -1
- package/dist/client/assets/PluginManager-C4UoLv4U.css +0 -1
- package/dist/client/assets/SettingsModal-Ci0_sqbU.css +0 -1
- package/dist/client/assets/SettingsModal-Cu93Jjho.js +0 -31
- package/dist/client/assets/SettingsModal-DWKgRxBA.css +0 -1
- package/dist/client/assets/SkillsView-Cytf009Z.css +0 -1
- package/dist/client/assets/index-CD0_dkME.css +0 -1
- package/dist/client/assets/index-DiewofJh.js +0 -692
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fusion/pi-claude-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "Fusion vendored fork: pi coding-agent extension that routes LLM calls through the Claude Code CLI. Forked from rchern/pi-claude-cli (MIT). See UPSTREAM.md.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { validatePluginManifest } from "@fusion/core";
|
|
3
|
-
import plugin from "../index.js";
|
|
3
|
+
import plugin, { CLI_PRINTING_PRESS_WORKFLOW_STEPS } from "../index.js";
|
|
4
4
|
import { ensureCliPressSchema } from "../store/cli-press-store.js";
|
|
5
5
|
import { makeFakeRegistry } from "./fixtures/registry.js";
|
|
6
6
|
|
|
@@ -18,10 +18,27 @@ describe("plugin registration contracts", () => {
|
|
|
18
18
|
expect(plugin.routes?.some((route) => route.path === "/drafts")).toBe(true);
|
|
19
19
|
expect(plugin.dashboardViews?.map((view) => view.viewId)).toEqual(["wizard", "manage"]);
|
|
20
20
|
expect(typeof plugin.executorRuntimeEnv).toBe("function");
|
|
21
|
-
|
|
22
|
-
expect(plugin.workflowStepTemplates).toBeUndefined();
|
|
21
|
+
expect(plugin.workflowSteps?.length).toBeGreaterThan(0);
|
|
23
22
|
} finally {
|
|
24
23
|
h.cleanup();
|
|
25
24
|
}
|
|
26
25
|
});
|
|
26
|
+
|
|
27
|
+
it("contributes script-mode workflow step templates", () => {
|
|
28
|
+
expect(plugin.workflowSteps?.length).toBeGreaterThan(0);
|
|
29
|
+
expect(plugin.workflowSteps).toEqual(CLI_PRINTING_PRESS_WORKFLOW_STEPS);
|
|
30
|
+
|
|
31
|
+
for (const step of plugin.workflowSteps ?? []) {
|
|
32
|
+
expect(step.stepId).toMatch(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
expect(
|
|
36
|
+
plugin.workflowSteps?.some((step) => step.mode === "script" && step.phase === "pre-merge"),
|
|
37
|
+
).toBe(true);
|
|
38
|
+
|
|
39
|
+
expect(plugin.manifest.workflowSteps?.map((step) => step.stepId)).toEqual(
|
|
40
|
+
plugin.workflowSteps?.map((step) => step.stepId),
|
|
41
|
+
);
|
|
42
|
+
expect(validatePluginManifest(plugin.manifest).valid).toBe(true);
|
|
43
|
+
});
|
|
27
44
|
});
|
package/dist/plugins/fusion-plugin-cli-printing-press/src/__tests__/workflow-integration.test.ts
CHANGED
|
@@ -1,22 +1,117 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { mkdtemp, rm } from "node:fs/promises";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
7
|
+
import { TaskStore, type WorkflowStepTemplate } from "@fusion/core";
|
|
2
8
|
import plugin from "../index.js";
|
|
3
9
|
import { installExecMock } from "./fixtures/exec-mock.js";
|
|
4
10
|
|
|
11
|
+
const execAsync = promisify(exec);
|
|
12
|
+
|
|
13
|
+
async function makeTaskStore() {
|
|
14
|
+
const rootDir = await mkdtemp(join(tmpdir(), "fn-4150-cli-printing-press-"));
|
|
15
|
+
const globalDir = await mkdtemp(join(tmpdir(), "fn-4150-cli-printing-press-global-"));
|
|
16
|
+
const store = new TaskStore(rootDir, globalDir, { inMemoryDb: true });
|
|
17
|
+
await store.init();
|
|
18
|
+
return { store, rootDir, globalDir };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function cleanupTaskStore(ctx: Awaited<ReturnType<typeof makeTaskStore>>) {
|
|
22
|
+
ctx.store.stopWatching();
|
|
23
|
+
ctx.store.close();
|
|
24
|
+
await rm(ctx.rootDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 50 });
|
|
25
|
+
await rm(ctx.globalDir, { recursive: true, force: true, maxRetries: 5, retryDelay: 50 });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function injectPluginTemplates(store: TaskStore): void {
|
|
29
|
+
const templates: Array<{ pluginId: string; template: WorkflowStepTemplate }> = (plugin.workflowSteps ?? []).map((template) => ({
|
|
30
|
+
pluginId: plugin.manifest.id,
|
|
31
|
+
template: {
|
|
32
|
+
id: `plugin:${plugin.manifest.id}:${template.stepId}`,
|
|
33
|
+
name: template.name,
|
|
34
|
+
description: template.description,
|
|
35
|
+
prompt: template.prompt ?? "",
|
|
36
|
+
mode: template.mode,
|
|
37
|
+
phase: template.phase,
|
|
38
|
+
scriptName: template.scriptName,
|
|
39
|
+
toolMode: template.toolMode,
|
|
40
|
+
defaultOn: template.defaultOn,
|
|
41
|
+
modelProvider: template.modelProvider,
|
|
42
|
+
modelId: template.modelId,
|
|
43
|
+
enabled: template.enabled,
|
|
44
|
+
category: "Plugin",
|
|
45
|
+
icon: "puzzle",
|
|
46
|
+
},
|
|
47
|
+
}));
|
|
48
|
+
store.setPluginWorkflowStepTemplates(templates);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async function runScriptStepFromSettings(store: TaskStore, scriptName: string): Promise<{ stdout: string; stderr: string }> {
|
|
52
|
+
const settings = await store.getSettings();
|
|
53
|
+
const command = settings.scripts?.[scriptName];
|
|
54
|
+
if (!command) {
|
|
55
|
+
throw new Error(`Missing script command for ${scriptName}`);
|
|
56
|
+
}
|
|
57
|
+
return execAsync(command, { timeout: 20_000, maxBuffer: 5 * 1024 * 1024 });
|
|
58
|
+
}
|
|
59
|
+
|
|
5
60
|
describe("workflow integration contracts", () => {
|
|
6
|
-
|
|
61
|
+
const stores: Array<Awaited<ReturnType<typeof makeTaskStore>>> = [];
|
|
62
|
+
|
|
63
|
+
afterEach(async () => {
|
|
64
|
+
while (stores.length > 0) {
|
|
65
|
+
const ctx = stores.pop();
|
|
66
|
+
if (ctx) {
|
|
67
|
+
await cleanupTaskStore(ctx);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
7
72
|
it("guards against execSync usage in workflow-oriented execution fixtures", () => {
|
|
8
73
|
const execMock = installExecMock();
|
|
9
74
|
execMock.assertExecSyncUnused();
|
|
10
75
|
expect(typeof plugin.manifest.id).toBe("string");
|
|
11
76
|
});
|
|
12
77
|
|
|
13
|
-
it("
|
|
14
|
-
|
|
78
|
+
it("materializes plugin script-mode workflow step through TaskStore", async () => {
|
|
79
|
+
const ctx = await makeTaskStore();
|
|
80
|
+
stores.push(ctx);
|
|
81
|
+
injectPluginTemplates(ctx.store);
|
|
82
|
+
|
|
83
|
+
const step = await ctx.store.getWorkflowStep("plugin:fusion-plugin-cli-printing-press:run-service-cli");
|
|
84
|
+
expect(step).toMatchObject({
|
|
85
|
+
id: "plugin:fusion-plugin-cli-printing-press:run-service-cli",
|
|
86
|
+
mode: "script",
|
|
87
|
+
phase: "pre-merge",
|
|
88
|
+
scriptName: "cli-printing-press:run-service-cli",
|
|
89
|
+
});
|
|
15
90
|
});
|
|
16
91
|
|
|
17
|
-
it("
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
92
|
+
it("runs a plugin script-mode step end-to-end via TaskStore plus project scripts", async () => {
|
|
93
|
+
const execMock = installExecMock();
|
|
94
|
+
execMock.setNextResult({ stdout: "ok\n", stderr: "", code: 0 });
|
|
95
|
+
|
|
96
|
+
const ctx = await makeTaskStore();
|
|
97
|
+
stores.push(ctx);
|
|
98
|
+
injectPluginTemplates(ctx.store);
|
|
99
|
+
|
|
100
|
+
await ctx.store.updateSettings({
|
|
101
|
+
scripts: {
|
|
102
|
+
"cli-printing-press:run-service-cli": "echo ok",
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
const step = await ctx.store.getWorkflowStep("plugin:fusion-plugin-cli-printing-press:run-service-cli");
|
|
107
|
+
expect(step).toMatchObject({
|
|
108
|
+
mode: "script",
|
|
109
|
+
scriptName: "cli-printing-press:run-service-cli",
|
|
110
|
+
phase: "pre-merge",
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
const result = await runScriptStepFromSettings(ctx.store, step!.scriptName!);
|
|
114
|
+
expect(result.stdout).toContain("ok");
|
|
115
|
+
execMock.assertExecSyncUnused();
|
|
21
116
|
});
|
|
22
117
|
});
|
|
@@ -2,6 +2,7 @@ import { definePlugin } from "@fusion/plugin-sdk";
|
|
|
2
2
|
import { createCliPrintingPressRoutes } from "./routes/wizard-routes.js";
|
|
3
3
|
import { buildExecutorRuntimeEnv } from "./runtime/executor-runtime-env.js";
|
|
4
4
|
import { createCliPressStore, ensureCliPressSchema } from "./store/cli-press-store.js";
|
|
5
|
+
import { CLI_PRINTING_PRESS_WORKFLOW_STEPS } from "./workflow-steps.js";
|
|
5
6
|
|
|
6
7
|
const storeByDb = new WeakMap<object, ReturnType<typeof createCliPressStore>>();
|
|
7
8
|
|
|
@@ -20,6 +21,7 @@ const plugin = definePlugin({
|
|
|
20
21
|
name: "CLI Printing Press",
|
|
21
22
|
version: "0.1.0",
|
|
22
23
|
description: "Guided wizard for drafting external service CLI definitions",
|
|
24
|
+
workflowSteps: CLI_PRINTING_PRESS_WORKFLOW_STEPS.map((step) => ({ stepId: step.stepId, name: step.name })),
|
|
23
25
|
},
|
|
24
26
|
state: "installed",
|
|
25
27
|
hooks: {
|
|
@@ -30,6 +32,7 @@ const plugin = definePlugin({
|
|
|
30
32
|
const store = getStore(ctx.taskStore as { getDatabase: () => object });
|
|
31
33
|
return buildExecutorRuntimeEnv(store, taskCtx, ctx);
|
|
32
34
|
},
|
|
35
|
+
workflowSteps: CLI_PRINTING_PRESS_WORKFLOW_STEPS,
|
|
33
36
|
dashboardViews: [
|
|
34
37
|
{
|
|
35
38
|
viewId: "wizard",
|
|
@@ -55,4 +58,5 @@ export { CliPrintingPressWizardView } from "./dashboard-view.js";
|
|
|
55
58
|
export { CliPrintingPressManageView } from "./manage-view.js";
|
|
56
59
|
export { CliPrintingPressTestRunner } from "./run/TestRunnerPanel.js";
|
|
57
60
|
export { createCliPressStore, ensureCliPressSchema } from "./store/cli-press-store.js";
|
|
61
|
+
export { CLI_PRINTING_PRESS_WORKFLOW_STEPS } from "./workflow-steps.js";
|
|
58
62
|
export * from "./store/cli-press-types.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PluginWorkflowStepContribution } from "@fusion/plugin-sdk";
|
|
2
|
+
|
|
3
|
+
export const CLI_PRINTING_PRESS_WORKFLOW_STEPS: PluginWorkflowStepContribution[] = [
|
|
4
|
+
{
|
|
5
|
+
stepId: "run-service-cli",
|
|
6
|
+
name: "Run Service CLI",
|
|
7
|
+
description: "Run generated service CLI checks before merge using the task project script map.",
|
|
8
|
+
mode: "script",
|
|
9
|
+
phase: "pre-merge",
|
|
10
|
+
scriptName: "cli-printing-press:run-service-cli",
|
|
11
|
+
enabled: true,
|
|
12
|
+
defaultOn: false,
|
|
13
|
+
},
|
|
14
|
+
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runfusion/fusion",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Fusion CLI: HTTP API server, daemon, dashboard launcher, and task tooling for the Fusion AI coding agent.",
|
|
6
6
|
"homepage": "https://github.com/Runfusion/Fusion#readme",
|
|
@@ -407,7 +407,7 @@ Lightweight URL fetch (no JS rendering). Use agent-browser skill for JS-heavy pa
|
|
|
407
407
|
|
|
408
408
|
### fn_research_run
|
|
409
409
|
|
|
410
|
-
|
|
410
|
+
Cited-research pipeline: create a bounded search/fetch/synthesis run (not an autonomous experiment loop) and optionally wait for completion.
|
|
411
411
|
|
|
412
412
|
| Parameter | Type | Required | Description |
|
|
413
413
|
|-----------|------|----------|-------------|
|
|
@@ -417,7 +417,7 @@ Start a bounded research run and optionally wait for findings.
|
|
|
417
417
|
|
|
418
418
|
### fn_research_list
|
|
419
419
|
|
|
420
|
-
|
|
420
|
+
Cited-research pipeline: list recent search/fetch/synthesis runs (not experiment-loop sessions).
|
|
421
421
|
|
|
422
422
|
| Parameter | Type | Required | Description |
|
|
423
423
|
|-----------|------|----------|-------------|
|
|
@@ -426,7 +426,7 @@ List recent research runs.
|
|
|
426
426
|
|
|
427
427
|
### fn_research_get
|
|
428
428
|
|
|
429
|
-
|
|
429
|
+
Cited-research pipeline: get one run with structured findings and citations (not experiment-loop state).
|
|
430
430
|
|
|
431
431
|
| Parameter | Type | Required | Description |
|
|
432
432
|
|-----------|------|----------|-------------|
|
|
@@ -434,7 +434,7 @@ Get one research run and structured findings.
|
|
|
434
434
|
|
|
435
435
|
### fn_research_cancel
|
|
436
436
|
|
|
437
|
-
|
|
437
|
+
Cited-research pipeline: cancel an in-flight run; terminal runs return INVALID_TRANSITION (does not control experiment loops).
|
|
438
438
|
|
|
439
439
|
| Parameter | Type | Required | Description |
|
|
440
440
|
|-----------|------|----------|-------------|
|
|
@@ -442,7 +442,7 @@ Cancel an in-flight research run. Terminal runs return INVALID_TRANSITION.
|
|
|
442
442
|
|
|
443
443
|
### fn_research_retry
|
|
444
444
|
|
|
445
|
-
|
|
445
|
+
Cited-research pipeline: retry a failed run when lifecycle marks it retryable (not an autonomous experiment loop retry).
|
|
446
446
|
|
|
447
447
|
| Parameter | Type | Required | Description |
|
|
448
448
|
|-----------|------|----------|-------------|
|
|
@@ -30,11 +30,11 @@ All skill/extension tool invocations in this catalog use the public `fn_*` names
|
|
|
30
30
|
| `fn_task_browse_github_issues` | List open GitHub issues from a repository to browse before importing. Returns issue numbers, titles, and URLs for selection. Use with fn_task_import_github_issue to import specific issues by number. |
|
|
31
31
|
| `fn_task_plan` | Create a task via AI-guided planning mode — interactive conversation to refine your idea into a well-specified task. |
|
|
32
32
|
| `fn_web_fetch` | Lightweight URL fetch (no JS rendering). Use agent-browser skill for JS-heavy pages. URL to fetch (http/https) Optional extraction hint for downstream summarization Timeout in milliseconds (default: 30000) Max bytes to return (default: 512000) |
|
|
33
|
-
| `fn_research_run` |
|
|
34
|
-
| `fn_research_list` |
|
|
35
|
-
| `fn_research_get` |
|
|
36
|
-
| `fn_research_cancel` |
|
|
37
|
-
| `fn_research_retry` |
|
|
33
|
+
| `fn_research_run` | Cited-research pipeline: create a bounded search/fetch/synthesis run (not an autonomous experiment loop) and optionally wait for completion. |
|
|
34
|
+
| `fn_research_list` | Cited-research pipeline: list recent search/fetch/synthesis runs (not experiment-loop sessions). |
|
|
35
|
+
| `fn_research_get` | Cited-research pipeline: get one run with structured findings and citations (not experiment-loop state). |
|
|
36
|
+
| `fn_research_cancel` | Cited-research pipeline: cancel an in-flight run; terminal runs return INVALID_TRANSITION (does not control experiment loops). |
|
|
37
|
+
| `fn_research_retry` | Cited-research pipeline: retry a failed run when lifecycle marks it retryable (not an autonomous experiment loop retry). |
|
|
38
38
|
| `fn_insight_list` | List persisted project insights with optional category/status filters. |
|
|
39
39
|
| `fn_insight_show` | Show a single persisted insight by ID. |
|
|
40
40
|
| `fn_insight_run_list` | List recent insight-generation runs with optional status/trigger filters. |
|