@thanh01.pmt/curriculum-kit 1.4.27 → 1.4.29
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/ai/index.cjs +46 -2
- package/dist/ai/index.cjs.map +1 -1
- package/dist/ai/index.d.cts +2 -2
- package/dist/ai/index.d.ts +2 -2
- package/dist/ai/index.mjs +46 -2
- package/dist/ai/index.mjs.map +1 -1
- package/dist/index.cjs +76 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs +76 -3
- package/dist/index.mjs.map +1 -1
- package/dist/media/index.cjs +46 -2
- package/dist/media/index.cjs.map +1 -1
- package/dist/media/index.d.cts +1 -1
- package/dist/media/index.d.ts +1 -1
- package/dist/media/index.mjs +46 -2
- package/dist/media/index.mjs.map +1 -1
- package/dist/pipeline/index.cjs.map +1 -1
- package/dist/pipeline/index.d.cts +1 -1
- package/dist/pipeline/index.d.ts +1 -1
- package/dist/pipeline/index.mjs.map +1 -1
- package/dist/publishers/index.d.cts +1 -1
- package/dist/publishers/index.d.ts +1 -1
- package/dist/storage/index.cjs +27 -0
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.cts +11 -2
- package/dist/storage/index.d.ts +11 -2
- package/dist/storage/index.mjs +27 -0
- package/dist/storage/index.mjs.map +1 -1
- package/dist/{streamRunner-kpS4MZP1.d.cts → streamRunner-DYHFhNUr.d.cts} +1 -1
- package/dist/{streamRunner-kpS4MZP1.d.ts → streamRunner-DYHFhNUr.d.ts} +1 -1
- package/dist/{types-BUJGYiep.d.ts → types-Bgk-C4K2.d.cts} +11 -0
- package/dist/{types-BUJGYiep.d.cts → types-Bgk-C4K2.d.ts} +11 -0
- package/dist/workflow/index.cjs +48 -3
- package/dist/workflow/index.cjs.map +1 -1
- package/dist/workflow/index.mjs +48 -3
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +23 -22
- package/LICENSE +0 -21
package/dist/index.d.cts
CHANGED
|
@@ -3,12 +3,12 @@ export { ActiveLearningWorkflow, ActiveLearningWorkflowSchema, ActivityLabSchema
|
|
|
3
3
|
import { A as AIProviderName, M as ModelResolutionOptions } from './provider-factory-Bv-eIkhg.cjs';
|
|
4
4
|
export { N as NVIDIA_MODELS, g as getAIModel } from './provider-factory-Bv-eIkhg.cjs';
|
|
5
5
|
export { ActivityPromptInput, AggregatedToolCall, AsyncLLMJudgeInput, AuditCurriculumQualityInput, CodeLabPromptInput, DEFAULT_ENABLED_PROVIDERS, DiagnosticQuizPromptInput, ExtensionPromptInput, GenerateActivityInput, GenerateCodeLabInput, GenerateDiagnosticQuizInput, GenerateExtensionInput, GenerateHandoutInput, GenerateLessonMasterInput, GenerateProjectInstructionInput, GenerateSelfLabInput, GenerateSlidesInput, GenerateTeacherGuideInput, GenerateWorksheetInput, HandoutPromptInput, HtmlDeckSlidePromptInput, JudgeEvaluationResult, JudgePromptInput, LLMJudgeEngine, LessonPromptInput, MarpMarkdownSlidePromptInput, ModelPolicyResolution, ModelPolicyResolver, ModelProviderKey, MultiProviderPolicyResolution, ProjectInstructionPromptInput, SLIDE_CANONICAL_METHODOLOGY, SelfLabPromptInput, SlidesPromptInput, StreamDiagnosticQuizInput, StreamLessonMasterInput, StreamSelfLabInput, TeacherGuidePromptInput, ToolDefinition, ToolExecutionResult, ToolExecutor, ToolLoopConfig, WorksheetPromptInput, activityTools, analystTools, assessorTools, auditCurriculumQualityFlow, buildActivityPrompt, buildCodeLabPrompt, buildDiagnosticQuizPrompt, buildExtensionPrompt, buildHandoutPrompt, buildHtmlDeckSlidePrompt, buildJudgePrompt, buildLessonMasterPrompt, buildMarpMarkdownSlidePrompt, buildProjectInstructionPrompt, buildSelfLabPrompt, buildSlidesPrompt, buildTeacherGuidePrompt, buildWorksheetPrompt, contentTools, designerTools, generateActivityFlow, generateCodeLabFlow, generateDiagnosticQuizFlow, generateExtensionFlow, generateHandoutFlow, generateLessonMasterFlow, generateProjectInstructionFlow, generateSelfLabFlow, generateSlidesFlow, generateTeacherGuideFlow, generateWorksheetFlow, illustratorTools, packagerTools, researcherTools, reviewerTools, streamCurriculumAIInferenceWithTools, streamDiagnosticQuizFlow, streamLessonMasterFlow, streamSelfLabFlow, techSmeTools } from './ai/index.cjs';
|
|
6
|
-
import { S as StreamRunnerOptions } from './streamRunner-
|
|
7
|
-
export { C as ChatMessage, c as ChunkType, D as DEFAULT_ARTIFACT_STREAM_IDLE_MS, d as DEFAULT_ARTIFACT_STREAM_TOTAL_MS, F as FallbackTarget, I as IdleAbort, f as StreamAbortController, j as createIdleAbortController, h as createStreamAbortController, e as extractThoughtAndContent, g as getDesignatedFallbackChain, b as getDesignatedFallbackConfig, a as isModelAllowed, i as isProviderEnabled, r as resolveApiKey, k as runCurriculumAIInference, s as streamCurriculumAIInference } from './streamRunner-
|
|
6
|
+
import { S as StreamRunnerOptions } from './streamRunner-DYHFhNUr.cjs';
|
|
7
|
+
export { C as ChatMessage, c as ChunkType, D as DEFAULT_ARTIFACT_STREAM_IDLE_MS, d as DEFAULT_ARTIFACT_STREAM_TOTAL_MS, F as FallbackTarget, I as IdleAbort, f as StreamAbortController, j as createIdleAbortController, h as createStreamAbortController, e as extractThoughtAndContent, g as getDesignatedFallbackChain, b as getDesignatedFallbackConfig, a as isModelAllowed, i as isProviderEnabled, r as resolveApiKey, k as runCurriculumAIInference, s as streamCurriculumAIInference } from './streamRunner-DYHFhNUr.cjs';
|
|
8
8
|
export { ArtifactLintReport, ConvertedSotBundle, GenerateProjectInstructionOptions, GenerateRoadmapCurriculumOptions, GenerateSelfPacedBundleInput, LintIssue, ProjectInstructionResult, RoadmapCurriculumOutput, SelfPacedBundleOutput, convertRoadmapToFoundationSot, generateProjectInstruction, generateRoadmapCurriculum, generateSelfPacedBundle, importRoadmapToProject, lintAndSanitizeArtifact, serializeActivityToMarkdown, serializeCodeLabToMarkdown, serializeDiagnosticQuizToMarkdown, serializeHandoutToMarkdown, serializeLessonToMarkdown, serializeProjectInstructionToMarkdown, serializeSelfLabToMarkdown, validateMarkdownTables, validateMermaidSyntax } from './pipeline/index.cjs';
|
|
9
9
|
export { A as AutoRepairOptions, a as AutoRepairResult, B as BundleTier, G as GenerateMilestoneBundleOptions, M as MilestoneCurriculumBundle, g as generateMilestoneCurriculumBundle, w as withAutoRepair } from './milestoneBundleGenerator-CN6F1zPs.cjs';
|
|
10
|
-
import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-
|
|
11
|
-
export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-
|
|
10
|
+
import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-Bgk-C4K2.cjs';
|
|
11
|
+
export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-Bgk-C4K2.cjs';
|
|
12
12
|
export { FileSystemCurriculumAdapter, FileSystemStorageOptions, STANDARD_SOT_FILES, StorageFactoryOptions, SupabaseCurriculumAdapter, SupabaseStorageConfig, atomicWriteFileSync, computeContentHash, createCurriculumStorage } from './storage/index.cjs';
|
|
13
13
|
import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-DR5YTtlt.cjs';
|
|
14
14
|
export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-DR5YTtlt.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ export { ActiveLearningWorkflow, ActiveLearningWorkflowSchema, ActivityLabSchema
|
|
|
3
3
|
import { A as AIProviderName, M as ModelResolutionOptions } from './provider-factory-Bv-eIkhg.js';
|
|
4
4
|
export { N as NVIDIA_MODELS, g as getAIModel } from './provider-factory-Bv-eIkhg.js';
|
|
5
5
|
export { ActivityPromptInput, AggregatedToolCall, AsyncLLMJudgeInput, AuditCurriculumQualityInput, CodeLabPromptInput, DEFAULT_ENABLED_PROVIDERS, DiagnosticQuizPromptInput, ExtensionPromptInput, GenerateActivityInput, GenerateCodeLabInput, GenerateDiagnosticQuizInput, GenerateExtensionInput, GenerateHandoutInput, GenerateLessonMasterInput, GenerateProjectInstructionInput, GenerateSelfLabInput, GenerateSlidesInput, GenerateTeacherGuideInput, GenerateWorksheetInput, HandoutPromptInput, HtmlDeckSlidePromptInput, JudgeEvaluationResult, JudgePromptInput, LLMJudgeEngine, LessonPromptInput, MarpMarkdownSlidePromptInput, ModelPolicyResolution, ModelPolicyResolver, ModelProviderKey, MultiProviderPolicyResolution, ProjectInstructionPromptInput, SLIDE_CANONICAL_METHODOLOGY, SelfLabPromptInput, SlidesPromptInput, StreamDiagnosticQuizInput, StreamLessonMasterInput, StreamSelfLabInput, TeacherGuidePromptInput, ToolDefinition, ToolExecutionResult, ToolExecutor, ToolLoopConfig, WorksheetPromptInput, activityTools, analystTools, assessorTools, auditCurriculumQualityFlow, buildActivityPrompt, buildCodeLabPrompt, buildDiagnosticQuizPrompt, buildExtensionPrompt, buildHandoutPrompt, buildHtmlDeckSlidePrompt, buildJudgePrompt, buildLessonMasterPrompt, buildMarpMarkdownSlidePrompt, buildProjectInstructionPrompt, buildSelfLabPrompt, buildSlidesPrompt, buildTeacherGuidePrompt, buildWorksheetPrompt, contentTools, designerTools, generateActivityFlow, generateCodeLabFlow, generateDiagnosticQuizFlow, generateExtensionFlow, generateHandoutFlow, generateLessonMasterFlow, generateProjectInstructionFlow, generateSelfLabFlow, generateSlidesFlow, generateTeacherGuideFlow, generateWorksheetFlow, illustratorTools, packagerTools, researcherTools, reviewerTools, streamCurriculumAIInferenceWithTools, streamDiagnosticQuizFlow, streamLessonMasterFlow, streamSelfLabFlow, techSmeTools } from './ai/index.js';
|
|
6
|
-
import { S as StreamRunnerOptions } from './streamRunner-
|
|
7
|
-
export { C as ChatMessage, c as ChunkType, D as DEFAULT_ARTIFACT_STREAM_IDLE_MS, d as DEFAULT_ARTIFACT_STREAM_TOTAL_MS, F as FallbackTarget, I as IdleAbort, f as StreamAbortController, j as createIdleAbortController, h as createStreamAbortController, e as extractThoughtAndContent, g as getDesignatedFallbackChain, b as getDesignatedFallbackConfig, a as isModelAllowed, i as isProviderEnabled, r as resolveApiKey, k as runCurriculumAIInference, s as streamCurriculumAIInference } from './streamRunner-
|
|
6
|
+
import { S as StreamRunnerOptions } from './streamRunner-DYHFhNUr.js';
|
|
7
|
+
export { C as ChatMessage, c as ChunkType, D as DEFAULT_ARTIFACT_STREAM_IDLE_MS, d as DEFAULT_ARTIFACT_STREAM_TOTAL_MS, F as FallbackTarget, I as IdleAbort, f as StreamAbortController, j as createIdleAbortController, h as createStreamAbortController, e as extractThoughtAndContent, g as getDesignatedFallbackChain, b as getDesignatedFallbackConfig, a as isModelAllowed, i as isProviderEnabled, r as resolveApiKey, k as runCurriculumAIInference, s as streamCurriculumAIInference } from './streamRunner-DYHFhNUr.js';
|
|
8
8
|
export { ArtifactLintReport, ConvertedSotBundle, GenerateProjectInstructionOptions, GenerateRoadmapCurriculumOptions, GenerateSelfPacedBundleInput, LintIssue, ProjectInstructionResult, RoadmapCurriculumOutput, SelfPacedBundleOutput, convertRoadmapToFoundationSot, generateProjectInstruction, generateRoadmapCurriculum, generateSelfPacedBundle, importRoadmapToProject, lintAndSanitizeArtifact, serializeActivityToMarkdown, serializeCodeLabToMarkdown, serializeDiagnosticQuizToMarkdown, serializeHandoutToMarkdown, serializeLessonToMarkdown, serializeProjectInstructionToMarkdown, serializeSelfLabToMarkdown, validateMarkdownTables, validateMermaidSyntax } from './pipeline/index.js';
|
|
9
9
|
export { A as AutoRepairOptions, a as AutoRepairResult, B as BundleTier, G as GenerateMilestoneBundleOptions, M as MilestoneCurriculumBundle, g as generateMilestoneCurriculumBundle, w as withAutoRepair } from './milestoneBundleGenerator-DTiJ5gIh.js';
|
|
10
|
-
import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-
|
|
11
|
-
export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-
|
|
10
|
+
import { I as ICurriculumStorage, P as ProjectStatusReport, S as SmartResumeContext, Q as QualityAuditReport } from './types-Bgk-C4K2.js';
|
|
11
|
+
export { b as ArtifactLifecycleInfo, A as ArtifactLifecycleState, L as LessonArtifactSummary, c as PipelineState, R as ReviewRecord, a as SotDocument, T as TaskLifecycleState } from './types-Bgk-C4K2.js';
|
|
12
12
|
export { FileSystemCurriculumAdapter, FileSystemStorageOptions, STANDARD_SOT_FILES, StorageFactoryOptions, SupabaseCurriculumAdapter, SupabaseStorageConfig, atomicWriteFileSync, computeContentHash, createCurriculumStorage } from './storage/index.js';
|
|
13
13
|
import { F as FrameworkPack, C as CoverageGateReport } from './standardsCoverageGate-DR5YTtlt.js';
|
|
14
14
|
export { B as BloomHintSchema, a as ClassificationSchema, m as CoverageGateInput, h as FrameworkMapping, d as FrameworkMappingSchema, f as FrameworkPackManifest, b as FrameworkPackManifestSchema, e as FrameworkPackSchema, g as FrameworkStatement, c as FrameworkStatementSchema, G as GradeBandSchema, i as MappingKind, M as MappingKindSchema, P as PackLintIssue, k as PackValidationResult, j as RecordProvenance, R as RecordProvenanceSchema, S as StatementCoverageRow, n as evaluateStandardsCoverage, l as lintFrameworkPack, v as validateFrameworkPack } from './standardsCoverageGate-DR5YTtlt.js';
|
package/dist/index.mjs
CHANGED
|
@@ -527,7 +527,12 @@ Guidelines:
|
|
|
527
527
|
const unique9RouterModels = Array.from(new Set(candidateModels));
|
|
528
528
|
for (const model of unique9RouterModels) {
|
|
529
529
|
try {
|
|
530
|
-
const
|
|
530
|
+
const r9Idle = options.idleTimeoutMs ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0) ?? 0;
|
|
531
|
+
const r9Total = options.timeoutMs ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0) ?? 0;
|
|
532
|
+
const idle = createStreamAbortController({
|
|
533
|
+
idleMs: r9Idle > 0 ? r9Idle : 9e4,
|
|
534
|
+
totalMs: r9Total > 0 ? r9Total : 3e5
|
|
535
|
+
});
|
|
531
536
|
const res = await fetch(`${ninerouterBaseUrl}/chat/completions`, {
|
|
532
537
|
method: "POST",
|
|
533
538
|
headers: {
|
|
@@ -766,7 +771,46 @@ Guidelines:
|
|
|
766
771
|
);
|
|
767
772
|
for (const target of fallbackChain) {
|
|
768
773
|
const { provider, model } = target;
|
|
769
|
-
if (provider === "
|
|
774
|
+
if ((provider === "9router" || provider === "ninerouter") && ninerouterKey && isProviderEnabled("9router")) {
|
|
775
|
+
try {
|
|
776
|
+
const rawUrl = resolveApiKey("NINEROUTER_BASE_URL") || resolveApiKey("NINE_ROUTER_BASE_URL") || "https://ai-router.orchable.app/v1";
|
|
777
|
+
const fbBaseUrl = rawUrl.replace(/["']/g, "").replace(/\/$/, "");
|
|
778
|
+
const fbIdle = options.idleTimeoutMs ?? (Number(process.env.ARTIFACT_STREAM_IDLE_TIMEOUT_MS || process.env.STREAM_IDLE_TIMEOUT_MS) || 0) ?? 0;
|
|
779
|
+
const fbTotal = options.timeoutMs ?? (Number(process.env.ARTIFACT_STREAM_TOTAL_TIMEOUT_MS || process.env.STREAM_TOTAL_TIMEOUT_MS) || 0) ?? 0;
|
|
780
|
+
const idle = createStreamAbortController({
|
|
781
|
+
idleMs: fbIdle > 0 ? fbIdle : 9e4,
|
|
782
|
+
totalMs: fbTotal > 0 ? fbTotal : 3e5
|
|
783
|
+
});
|
|
784
|
+
const res = await fetch(`${fbBaseUrl}/chat/completions`, {
|
|
785
|
+
method: "POST",
|
|
786
|
+
headers: {
|
|
787
|
+
"Authorization": `Bearer ${ninerouterKey}`,
|
|
788
|
+
"Content-Type": "application/json"
|
|
789
|
+
},
|
|
790
|
+
body: JSON.stringify({
|
|
791
|
+
model,
|
|
792
|
+
messages: formattedMessages,
|
|
793
|
+
max_tokens: maxTokens,
|
|
794
|
+
temperature,
|
|
795
|
+
stream: true,
|
|
796
|
+
stream_options: { include_usage: true }
|
|
797
|
+
}),
|
|
798
|
+
signal: idle.signal
|
|
799
|
+
});
|
|
800
|
+
if (res.ok) {
|
|
801
|
+
const text = await processOpenAISSEStream(res, onChunk, idle);
|
|
802
|
+
if (text && text.trim()) {
|
|
803
|
+
console.log(`[streamRunner] \u2705 Designated fallback 9Router (${model}) succeeded!`);
|
|
804
|
+
return text;
|
|
805
|
+
}
|
|
806
|
+
} else {
|
|
807
|
+
const errText = await res.text().catch(() => "");
|
|
808
|
+
providerErrors[`designated_fallback_9router_${model}`] = `HTTP ${res.status}: ${errText.slice(0, 120)}`;
|
|
809
|
+
}
|
|
810
|
+
} catch (e) {
|
|
811
|
+
providerErrors[`designated_fallback_9router_${model}`] = e?.message || "Network error";
|
|
812
|
+
}
|
|
813
|
+
} else if (provider === "nvidia" && nvidiaKey && isProviderEnabled("nvidia")) {
|
|
770
814
|
try {
|
|
771
815
|
const nvdIdle = options.idleTimeoutMs ?? 18e4;
|
|
772
816
|
const nvdTotal = options.timeoutMs ?? 6e5;
|
|
@@ -9672,6 +9716,16 @@ ${lessonTable}
|
|
|
9672
9716
|
await this.savePipelineState(projectId, current);
|
|
9673
9717
|
return current;
|
|
9674
9718
|
}
|
|
9719
|
+
/** Disk adapter: purge = rm the file (best-effort, mirrors cloud deleteArtifact). */
|
|
9720
|
+
async deleteArtifact(projectId, relPath) {
|
|
9721
|
+
try {
|
|
9722
|
+
const projectDir = this.getProjectDir(projectId);
|
|
9723
|
+
const targetPath = path3.join(projectDir, relPath);
|
|
9724
|
+
this.assertInsideProject(projectDir, targetPath);
|
|
9725
|
+
if (fs2.existsSync(targetPath)) fs2.rmSync(targetPath, { force: true });
|
|
9726
|
+
} catch {
|
|
9727
|
+
}
|
|
9728
|
+
}
|
|
9675
9729
|
};
|
|
9676
9730
|
var SupabaseCurriculumAdapter = class {
|
|
9677
9731
|
client;
|
|
@@ -9837,6 +9891,23 @@ var SupabaseCurriculumAdapter = class {
|
|
|
9837
9891
|
} catch {
|
|
9838
9892
|
}
|
|
9839
9893
|
}
|
|
9894
|
+
/**
|
|
9895
|
+
* Split-brain root-cause fix (2026-09-14): purge must reach the cloud copy
|
|
9896
|
+
* too. Removes the storage object AND the indexed `curriculum_artifacts`
|
|
9897
|
+
* row (the row is what `readArtifact`-style indexed readers resolve first).
|
|
9898
|
+
* Best-effort / no-throw per the interface contract.
|
|
9899
|
+
*/
|
|
9900
|
+
async deleteArtifact(projectId, relPath) {
|
|
9901
|
+
const fullPath = `${projectId}/${relPath.replace(/^\//, "")}`;
|
|
9902
|
+
try {
|
|
9903
|
+
await this.client.storage.from(this.bucketName).remove([fullPath]);
|
|
9904
|
+
} catch {
|
|
9905
|
+
}
|
|
9906
|
+
try {
|
|
9907
|
+
await this.client.from("curriculum_artifacts").delete().match({ project_id: projectId, rel_path: relPath });
|
|
9908
|
+
} catch {
|
|
9909
|
+
}
|
|
9910
|
+
}
|
|
9840
9911
|
async listLessons(projectId) {
|
|
9841
9912
|
const summaries = [];
|
|
9842
9913
|
const processedLessons = /* @__PURE__ */ new Set();
|
|
@@ -10855,7 +10926,8 @@ function buildLanguageDirective(targetLanguage) {
|
|
|
10855
10926
|
- All section titles, table headers, table cells, lesson names, learning objectives, pedagogical narratives, and cognitive analyses MUST be written in natural, fluent, academic ${name}.
|
|
10856
10927
|
- Technical identifiers, code keywords (e.g. setup(), loop(), pinMode()), standard protocols (I2C, SPI, UART, GPIO), and component model numbers (ESP32, Arduino Uno) remain in standard technical notation, but all surrounding explanations MUST be in ${name}.
|
|
10857
10928
|
- DO NOT mix in paragraphs, tables, or titles written in any other language. Strict adherence is required.${exampleLine ? `
|
|
10858
|
-
${exampleLine}` : ""}
|
|
10929
|
+
${exampleLine}` : ""}
|
|
10930
|
+
- CJK / NON-LATIN SCRIPT BAN (ABSOLUTE): NEVER output characters from Chinese (\u6C49\u5B57), Japanese (\u304B\u306A/\u6F22\u5B57), or Korean (\uD55C\uAE00) scripts ANYWHERE in the document \u2014 not even a single glyph spliced inside a ${name} sentence. Observed past violations that are STRICTLY forbidden: \u6392\u67E5, \u5305\u542B, \u5BFC\u81F4, \u662F\u591A\u5C11, \u6280\u672F, \u771F\u673A, \u4F11\u606F, \u7EB8\u8D28. To express such meaning write it fully in ${name} or keep the ENGLISH technical term (e.g. write "t\u1EF1 ki\u1EC3m tra l\u1ED7i" / "self-debugging", "bao g\u1ED3m" / "includes"). A mechanical scanner rejects any document containing even one CJK character.`;
|
|
10859
10931
|
}
|
|
10860
10932
|
function matchesArtifactType(candidate, target) {
|
|
10861
10933
|
const c = candidate.trim().toUpperCase();
|
|
@@ -29622,6 +29694,7 @@ ${targetLayer === 1 ? `
|
|
|
29622
29694
|
|
|
29623
29695
|
- EVERY text/textarea field MUST have a complete, professional, ready-to-use pre-filled text in ${textLangMandate} adhering strictly to standard pedagogical terminology. NO placeholders, NO empty strings.
|
|
29624
29696
|
- EVERY choice field MUST have realistic concrete options ${choiceLangMandate} with EXACTLY ONE recommended option (selected: true).
|
|
29697
|
+
- SCRIPT POLICY (CJK/non-Latin ban): Write ALL output STRICTLY in the ${textLangMandate} using the Latin alphabet. NEVER insert characters from CJK scripts (Chinese \u6C49\u5B57, Japanese \u304B\u306A/\u6F22\u5B57, Korean \uD55C\uAE00) or any other non-Latin script ANYWHERE in the output \u2014 not even a single character inside an otherwise Vietnamese/English sentence. If a technical term has no natural translation, keep the ENGLISH term (e.g. write "t\u1EF1 ki\u1EC3m tra l\u1ED7i" or "self-debugging", NEVER \u6392\u67E5 l\u1ED7i; write "bao g\u1ED3m", NEVER \u5305\u542B). This ban includes partial words spliced into Vietnamese text like \u6392\u67E5, \u5305\u542B, \u5BFC\u81F4, \u662F\u591A\u5C11.
|
|
29625
29698
|
|
|
29626
29699
|
RETURN STRICT VALID JSON ONLY adhering exactly to this format:
|
|
29627
29700
|
{
|