toolname

package
v0.31.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2026 License: MIT Imports: 0 Imported by: 0

Documentation

Overview

Package toolname 工具名 → 程序内可用的标识符:一条**单一真相**。

它为什么是一个独立包,而不是两处各写一份

工具名要在两处被规整成同一个字符串:

  • 生产侧(tooldisclose):从工具目录派生给模型看的调用形态, 形态里的函数名必须是**净化后**的名字——因为程序里真正挂上去的 就是净化后的那个(ptc 把绑定挂在 host.<净化名> 上)。
  • 消费侧(ptc):把绑定挂到 host 对象上,并校验形态串里的函数名 等于净化后的绑定名。

两侧必须**逐字一致**,否则就是「生产侧派得出、消费侧认不出」的夹缝: 生产侧返回 `get-logs(h)`,消费侧要的是 `get_logs(h)`,于是形态在装配期 被拒——而症状是「工具明明在目录里,程序就是调不通」,排查时极容易先 怀疑模型或宿主。

这条规则**曾经**在两个包里各写一份(规范名写成两份、净化规则又各写一份), 于是两侧对「工具名长什么样」的假设漂移开:生产侧照抄目录里的原名, 消费侧按净化后的名字挂载,契约在文档里写着「直接可用」,代码里却拒。

抄一份规则省一个包,但那份规则有边界(数字开头补前缀、前导非法字符跳过、 撞名即拒),任何一边改了而另一边没改,契约就静默断掉——而断掉的形态 是「文档说好的,程序就是跑不通」。

规整规则

字母、数字、_ 、$        保留
数字出现在首位            前置 _(9lives → _9lives)
其他字符(- . 空格等)    已开始则记为 _;尚未开始则跳过(-x- → x_)
全部非法                  结果为空串(调用方必须处理,不能当合法名字用)

「前导非法字符跳过而不是记为 _」是刻意的:`-x-` 规整成 `x_` 而不是 `_x_`, 前者读起来像名字,后者像内部产物。

撞名是调用方的事,本包不拦

`get-logs` 与 `get_logs` 规整后同名。拦不拦、报什么错,取决于调用方 的语义(ptc 把它当装配期错误拒掉,因为顶替意味着副作用错位)。 本包只提供规则,不做集合级别的判定。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func IsJSIdent

func IsJSIdent(s string) bool

IsJSIdent 判定 s 能否**直接**作为 JS 标识符使用。

与 Normalize 的区别:IsJSIdent 只问「原样用行不行」, Normalize 问「不行的话该用哪个」。两者必须用同一套字符规则, 否则会出现「这里说行、那里规整成另一个」的夹缝。

func Normalize

func Normalize(name string) string

Normalize 把工具名规整成合法 JS 标识符。

返回空串表示这个名字**无法**规整(全部字符非法)——调用方必须把它当 「这个名字用不了」处理,不能当合法名字继续用:空名会让程序里的 `host.<名字>` 根本不存在,症状是「调用了一个不存在的函数」, 远不如「这个名字非法」直观。

规整不保证唯一:`get-logs` 与 `get_logs` 都得到 `get_logs`。 是否允许由调用方决定(ptc 选择在装配期拒,因为顶替意味着副作用错位)。

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL