U10a 续片:提示词与 xlsx 资产内嵌回退 #10

Merged
weichen merged 1 commits from feature/u10a-embedded-assets-2026-09-29 into dev 2026-09-29 07:23:13 +00:00
5 changed files with 65 additions and 4 deletions
Showing only changes of commit 95e659a915 - Show all commits
+10
View File
@@ -0,0 +1,10 @@
// configs 包内嵌运行提示词资产(U10a:单文件应用无源码目录时回退使用)。
// 磁盘路径存在时仍优先磁盘(开发态行为不变)。
package configs
import "embed"
// Assets 内嵌 configs/agents 与 configs/shared 提示词。
//
//go:embed agents shared
var Assets embed.FS
+13 -2
View File
@@ -1,10 +1,13 @@
package quote
import (
"bytes"
"fmt"
"os"
"path/filepath"
"strings"
"chat-agent-system/templates"
"github.com/xuri/excelize/v2"
)
@@ -112,8 +115,16 @@ func CalculateAndFill(in Input, templateXlsx string, outPath string) (*Summary,
}
}
f, err := excelize.OpenFile(templateXlsx)
if err != nil {
var f *excelize.File
if tf, err := excelize.OpenFile(templateXlsx); err == nil {
f = tf
} else if eb, eerr := templates.XlsxAssets.ReadFile(strings.TrimPrefix(filepath.ToSlash(templateXlsx), "templates/")); eerr == nil {
ef, oerr := excelize.OpenReader(bytes.NewReader(eb))
if oerr != nil {
return nil, fmt.Errorf("open embedded template %s: %w", templateXlsx, oerr)
}
f = ef
} else {
return nil, fmt.Errorf("open template %s: %w", templateXlsx, err)
}
defer f.Close()
+14 -2
View File
@@ -6,6 +6,7 @@ import (
"path/filepath"
"strings"
"chat-agent-system/configs"
"chat-agent-system/internal/workflowdef"
"chat-agent-system/templates"
)
@@ -90,12 +91,23 @@ func GetAgentInstructionFile(rel string) (string, error) {
path := filepath.Join(root, filepath.FromSlash(rel))
b, err := os.ReadFile(path)
if err != nil {
return "", fmt.Errorf("read agent instruction file %s: %w", rel, err)
// U10a:磁盘缺失(单文件部署)时回退内嵌 configs 资产。
eb, eerr := configs.Assets.ReadFile(strings.TrimPrefix(rel, "configs/"))
if eerr != nil {
return "", fmt.Errorf("read agent instruction file %s: %w", rel, err)
}
b = eb
}
inst := string(b)
writingPath := filepath.Join(root, "configs", "shared", "writing.md")
if wb, err := os.ReadFile(writingPath); err == nil {
wb, werr := os.ReadFile(writingPath)
if werr != nil {
if eb, eerr := configs.Assets.ReadFile("shared/writing.md"); eerr == nil {
wb = eb
}
}
if wb != nil {
inst += "\n\n" + string(wb)
}
return inst, nil
+23
View File
@@ -4,7 +4,9 @@ import (
"strings"
"testing"
"chat-agent-system/configs"
"chat-agent-system/internal/template"
"chat-agent-system/templates"
)
func TestLoadDocTemplatesAndAgents(t *testing.T) {
@@ -67,3 +69,24 @@ func TestGetDocTemplate_WorksWithoutDiskCheckout(t *testing.T) {
}
}
}
// TestEmbeddedPromptAssetsPresent 校验 U10a 内嵌资产齐备(单文件部署回退源)。
// embed 在编译期捕获源码树,这里防止资产被意外移出嵌入范围。
func TestEmbeddedPromptAssetsPresent(t *testing.T) {
for _, name := range []string{"agents/leader.md", "agents/engineer.md", "shared/writing.md"} {
b, err := configs.Assets.ReadFile(name)
if err != nil {
t.Fatalf("embedded configs asset %s: %v", name, err)
}
if len(b) == 0 {
t.Fatalf("embedded configs asset %s is empty", name)
}
}
xl, err := templates.XlsxAssets.ReadFile("xlsx/cdo_quote.xlsx")
if err != nil {
t.Fatalf("embedded xlsx asset: %v", err)
}
if len(xl) == 0 {
t.Fatal("embedded xlsx asset is empty")
}
}
+5
View File
@@ -7,3 +7,8 @@ import "embed"
//
//go:embed docs/*.md
var DocTemplates embed.FS
// XlsxAssets 内嵌运行 xlsx 资产(如 cdo_quote.xlsx);磁盘路径存在时优先磁盘。
//
//go:embed xlsx
var XlsxAssets embed.FS