WeKnora deployment source with the reviewed wiki identity, summary and recovery fixes
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
Anydoc / anydoc parser engine (push) Canceled after 0s
App / Format, vet, test, and build (push) Canceled after 0s
CLI / test (macos-latest / go 1.26) (push) Canceled after 0s
CLI / test (ubuntu-latest / go 1.26) (push) Canceled after 0s
CLI / test (windows-latest / go 1.26) (push) Canceled after 0s
Build and Push Docker Image / build-ui (push) Canceled after 0s
Build and Push Docker Image / build-docreader (push) Canceled after 0s
Build and Push Docker Image / build-sandbox (push) Canceled after 0s
Build and Push Docker Image / build-app (amd64, linux/amd64, ubuntu-latest) (push) Canceled after 0s
Build and Push Docker Image / build-app (arm64, linux/arm64, ubuntu-24.04-arm) (push) Canceled after 0s
DocReader / Python tests and Go client tests (push) Canceled after 0s
Build & Publish (dsh-weknora) / Typecheck, test, pack (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (pinned) (push) Canceled after 0s
Build & Publish (dsh-weknora) / End-to-end inside dsh (latest, advisory) (push) Canceled after 0s
Frontend / Test, type-check, and build (push) Canceled after 0s
Go Lint Cache / warm lint cache (.) (push) Canceled after 0s
Go Lint Cache / warm lint cache (cli) (push) Canceled after 0s
Go Lint Cache / warm lint cache (client) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.10) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.11) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.12) (push) Canceled after 0s
Build & Publish (mcp-server) / Test (Python 3.13) (push) Canceled after 0s
Build and Push Docker Image / merge (push) Canceled after 0s
Build & Publish (dsh-weknora) / Publish to npm (push) Canceled after 0s
Build & Publish (mcp-server) / Build sdist + wheel (push) Canceled after 0s
Build & Publish (mcp-server) / Publish to PyPI (push) Canceled after 0s
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package tools
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/Tencent/WeKnora/internal/modelcontext"
|
||||
)
|
||||
|
||||
// Every built-in tool must declare a model-handle policy. Without an entry,
|
||||
// modelcontext treats the tool's output like dynamic MCP output: durable chunk
|
||||
// IDs, knowledge IDs and KB IDs are passed through to the model verbatim,
|
||||
// which the source protocol prompt explicitly forbids. An empty policy is a
|
||||
// valid answer ("compact known IDs, render nothing structured"); silence is
|
||||
// not, because a newly added tool would opt out by accident.
|
||||
func TestEveryBuiltInToolDeclaresAModelHandlePolicy(t *testing.T) {
|
||||
builtIns := []string{
|
||||
ToolThinking,
|
||||
ToolTodoWrite,
|
||||
ToolGrepChunks,
|
||||
ToolKnowledgeSearch,
|
||||
ToolListKnowledgeChunks,
|
||||
ToolQueryKnowledgeGraph,
|
||||
ToolGetDocumentInfo,
|
||||
ToolSearchConversations,
|
||||
ToolSearchMemory,
|
||||
ToolDatabaseQuery,
|
||||
ToolDataAnalysis,
|
||||
ToolDataSchema,
|
||||
ToolWebSearch,
|
||||
ToolWebFetch,
|
||||
ToolExecuteSkillScript,
|
||||
ToolReadSkill,
|
||||
ToolListSandboxFiles,
|
||||
ToolReadSandboxFile,
|
||||
ToolWriteSandboxFile,
|
||||
ToolEditSandboxFile,
|
||||
ToolWriteSkillFile,
|
||||
ToolEditSkillFile,
|
||||
ToolShellExec,
|
||||
ToolWikiReadPage,
|
||||
ToolWikiWritePage,
|
||||
ToolWikiReplaceText,
|
||||
ToolWikiRenamePage,
|
||||
ToolWikiDeletePage,
|
||||
ToolWikiSearch,
|
||||
ToolWikiReadSourceDoc,
|
||||
ToolWikiFlagIssue,
|
||||
ToolWikiReadIssue,
|
||||
ToolWikiUpdateIssue,
|
||||
}
|
||||
for _, name := range builtIns {
|
||||
if !modelcontext.HasToolPolicy(name) {
|
||||
t.Errorf("built-in tool %q has no entry in modelcontext.toolHandlePolicies", name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AvailableToolDefinitions drives the settings UI, so anything listed there is
|
||||
// a built-in the Agent can register and must also carry a policy.
|
||||
func TestAvailableToolDefinitionsDeclareModelHandlePolicies(t *testing.T) {
|
||||
for _, definition := range AvailableToolDefinitions() {
|
||||
if !modelcontext.HasToolPolicy(definition.Name) {
|
||||
t.Errorf("tool %q is exposed to the UI but has no model-handle policy", definition.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user