refactor: split submit_sft_via_cml.sh into submit_sft.sh + submit_cml_eval.sh

- submit_sft.sh: pure SFT submission, prints JobID and exits (no embedded watcher)
- submit_cml_eval.sh: pure CML eval, reads workflow_id/version from config.yaml
- jupyter_runtime write_text: rewrite to use Contents API instead of terminal websocket
- SKILL.md: restrict trigger to explicit UI click only
- program.md: update §5.2 docs to reflect two-script workflow

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
hupenglong1
2026-05-25 17:21:42 +08:00
parent d2c221e2da
commit a3ab74b506
8 changed files with 328 additions and 186 deletions
@@ -535,7 +535,7 @@ type IterationEntry = {
iteration?: number;
runDic?: number;
timestamp?: string;
hypothesis?: string;
hypothesis?: unknown;
intervention?: { type?: string; summary?: string } | string;
prediction?: Record<string, number | string>;
results?: Record<string, number | string>;
@@ -546,7 +546,7 @@ type IterationEntry = {
cases?: number;
}>;
error_delta?: { persistent?: number; new?: number; fixed?: number };
next_hypothesis?: string;
next_hypothesis?: unknown;
[key: string]: unknown;
};
@@ -648,7 +648,7 @@ function IterationCard({
<div className="space-y-3 px-4 py-3 text-[13px]">
{entry.hypothesis ? (
<Field label="假设" tone="primary">
{entry.hypothesis}
<RichText value={entry.hypothesis} />
</Field>
) : null}
{intervention.summary || intervention.type ? (
@@ -737,7 +737,7 @@ function IterationCard({
) : null}
{entry.next_hypothesis ? (
<Field label="下一步假设" tone="accent">
{entry.next_hypothesis}
<RichText value={entry.next_hypothesis} />
</Field>
) : null}
{otherKeys.length > 0 ? (
@@ -759,6 +759,18 @@ function IterationCard({
);
}
function RichText({ value }: { value: unknown }) {
if (value == null) return null;
if (typeof value === "string" || typeof value === "number") {
return <>{String(value)}</>;
}
return (
<pre className="overflow-x-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed">
{JSON.stringify(value, null, 2)}
</pre>
);
}
function Field({
label,
children,