arg不可变参数
必需参数由调用者显式传入,类型始终为 Unicode 字符串。
arg.audience = researchersXML PROMPT PROJECT MANAGER · v1.2.1
创建项目,或从 xmlsquish.toml 发现已有项目与工作区:格式化源码、解析锁定依赖、把 XML 编译成可缓存的二进制 XSIR,经中端优化与链接,发布 .prompt、可复现 .pack 或可重定位 .sopack。
Rust 2024 · 项目级增量构建 · Human / Short / NDJSON
xs:argpersona.xmlexpand + argtasks.xmlimport + call<xs:expand ref="demo:persona">
<xs:arg name="audience" value="researchers"/>
</xs:expand>
<xs:expand ref="demo:task"/>ir/agent/site-demo/*.xsirlinked targetagent.promptagent.psdbgnew 在尚不存在的目录生成规范项目;随后在 xmlsquish.toml 声明目标,add / remove 以事务方式更新依赖。
每个 XML 模块生成规范二进制中间表示(XSIR);内容寻址缓存复用未变化的纯变换。
链接冻结的模块图并实例化入口,原子发布 .prompt;按 --emit 生成 .xsir 与自包含 .psdbg 伴随文件。
v1.1.0 · AGENT SKILLS
在工作区根清单声明本地或 Git skill,在锁文件中固定完整内容,再安全地同步到 .agents/skills。内置的 prompt-squish 指南也能一条命令安装。
阅读 Agent Skills 用户指南xmlsquish.toml [skills]
↓ declare
xmlsquish.lock [[skill]] + BLAKE3
↓ sync-skills
.agents/skills/ review-checks/
$ xmlsquish install-skill --projectSHOW, DON'T JUST MINIFY
切换项目清单、入口源码、二进制 XSIR 摘要、链接结果、最终 .prompt 与 .psdbg。示例命令可直接在仓库根目录运行。
未启用 JavaScript:以下完整列出两组参数的源码与结果。
arg.audience = researchers,由调用者显式传入。
arg.audience = everyone,由调用者显式传入。
manifest-version = 1
[package]
name = "site-demo"
version = "1.0.0"
source-root = "."
[target.agent]
entry = "agent.xml"<xs:entry xmlns:xs="https://xmlsquish.moesegfault.dev/ns" xmlns:demo="https://example.com/macros/demo">
<xs:import src="persona.xml"/>
<xs:import src="tasks.xml"/>
<prompt>
<xs:expand ref="demo:persona"><xs:arg name="audience" value="researchers"/></xs:expand>
<xs:expand ref="demo:task"/>
</prompt>
</xs:entry>XSIR/1 canonical binary module set
target/xmlsquish/artifacts/ir/agent/site-demo/agent.xsir 2535 bytes blake3:8571019ad9b88ee5
target/xmlsquish/artifacts/ir/agent/site-demo/persona.xsir 2425 bytes blake3:f0fb1883049c3f43
target/xmlsquish/artifacts/ir/agent/site-demo/tasks.xsir 1664 bytes blake3:2ec94ab1ea5f9300target site-demo:agent
compile 3 modules → middle-end optimize → link → instantiate → backend → publish<prompt> <Persona> <audience> researchers </audience> <voice> clear & kind </voice> </Persona> <task> Explain the trade-offs. </task> </prompt>PSDBG/1 self-contained debug companion
target/xmlsquish/artifacts/agent.psdbg 9600 bytes blake3:de19134660fcbefbmanifest-version = 1
[package]
name = "site-demo"
version = "1.0.0"
source-root = "."
[target.agent]
entry = "agent.xml"<xs:entry xmlns:xs="https://xmlsquish.moesegfault.dev/ns" xmlns:demo="https://example.com/macros/demo">
<xs:import src="persona.xml"/>
<xs:import src="tasks.xml"/>
<prompt>
<xs:expand ref="demo:persona"><xs:arg name="audience" value="everyone"/></xs:expand>
<xs:expand ref="demo:task"/>
</prompt>
</xs:entry>XSIR/1 canonical binary module set
target/xmlsquish/artifacts/ir/agent/site-demo/agent.xsir 2529 bytes blake3:fbf198aaf0936012
target/xmlsquish/artifacts/ir/agent/site-demo/persona.xsir 2425 bytes blake3:f0fb1883049c3f43
target/xmlsquish/artifacts/ir/agent/site-demo/tasks.xsir 1664 bytes blake3:2ec94ab1ea5f9300target site-demo:agent
compile 3 modules → middle-end optimize → link → instantiate → backend → publish<prompt> <Persona> <audience> everyone </audience> <voice> clear & kind </voice> </Persona> <task> Explain the trade-offs. </task> </prompt>PSDBG/1 self-contained debug companion
target/xmlsquish/artifacts/agent.psdbg 9591 bytes blake3:b85d179e2ae77002数据记录当前项目管理器的工件契约;浏览器只展示结果,不把二进制 XSIR 伪装成 XML。
EXPLICIT CONTEXT. LOCAL STATE.
源码单元(SourceUnit)按规范 URI 冻结;每次调用建立独立展开帧(Expansion Frame),仅显式传递 arg 与 fill。
xs:arg显式参数进入新的调用帧相对 src 与 file.* 绑定到宏的定义位置,不随调用者变化。参数不会隐式继承;所有声明参数都必须显式提供。
arg必需参数由调用者显式传入,类型始终为 Unicode 字符串。
arg.audience = researchersfileuri / dir / name 只描述当前宏的定义源码。
file.name = persona.xmlmatchifr 的命名捕获仅在当前词法块内有效,离开后恢复外层绑定。
match.head · match.tailslot / fillXML 节点序列与标量参数严格分离,不隐式转换为字符串。
<xs:slot name="body"/>SMALL LANGUAGE. USEFUL BOUNDARIES.
module 只存放宏定义;独立的 entry 导入模块、构建提示词。expand 递归展开宏并按值返回结果。
<xs:import src="persona.xml"/>
<xs:expand ref="demo:persona">
<xs:arg name="audience" value="researchers"/>
</xs:expand>ifr 匹配标量字符串,命名捕获只在词法块内可见。完整源码闭包在执行前加载与验证,包括未执行分支。
<xs:ifr get="file.name" pattern="^tasks[.]xml$">
<task>Explain the trade-offs.</task>
</xs:ifr>insert 将 arg.*、file.* 或 match.* 作为转义后的 XML 文本输出,不重新解析为标签或宏。
<answer><xs:insert get="arg.text"/></answer>
<!-- arg.text is text, never markup. -->FROM SOURCE TO YOUR WORKFLOW
new、fmt、build、add、remove 与 inspect 共享同一管理器与事件协议;new 创建项目,build 默认继续独立工作并原子发布成功目标。
new 要求目标尚不存在;它与面向已有目录的 init 不同。其他命令向上发现 xmlsquish.toml,也可显式传 --manifest-path。
从当前工作区源码安装(Rust 1.88+) ↗terminal / xmlsquish# 从当前工作区源码安装(Rust 1.88+)
cargo install --git https://github.com/kleedaisuki/prompt-squish --locked# 在尚不存在的目录创建规范项目
xmlsquish new hello-prompts# 格式化项目源码;--check 只检查
xmlsquish fmt --check --manifest-path hello-prompts/xmlsquish.toml# 构建 prompt、XSIR 与调试伴随文件
xmlsquish build --offline --manifest-path hello-prompts/xmlsquish.toml# 添加依赖并更新清单与锁文件
xmlsquish add prompt-kit@^1 --registry default --dry-run# 移除直接依赖别名
xmlsquish remove prompt-kit --dry-run# 检查类型化 IR、链接、来源、缓存或产物
xmlsquish inspect link agent --manifest-path examples/site-demo/xmlsquish.toml# NDJSON 事件流,适合 CI 与工具
xmlsquish --message-format=json build --manifest-path examples/site-demo/xmlsquish.tomlHuman 提供进度与摘要,Short 逐行且可 grep,--message-format=json 输出带版本与序号的换行分隔 JSON(NDJSON)事件。--plain 提供无装饰追加输出。
{"version":{"major":3,"minor":0},"sequence":0,"payload":{"type":"planning_started"}}
{"version":{"major":3,"minor":0},"sequence":1,"payload":{"type":"action_succeeded","data":{"kind":"compile","cache":"persistent"}}}
{"version":{"major":3,"minor":0},"sequence":2,"payload":{"type":"job_finished","data":{"status":"success"}}}MEASURE THE RIGHT TRANSFORMATION
构建计划把扫描、编译、链接、实例化、后端与发布分开;只有确定性的纯变换进入持久动作缓存。
xmlsquish.toml*.xsiragent.prompt计数描述演示项目的结构,不声称二进制 XSIR 是文本或把缓存命中等同于端到端加速;最终字节数不含 BOM。
THE FINE PRINT, UP FRONT.
仅构建可信源码与依赖:本地及已解析包可被前端读取。宏不能读取环境、时间或运行子进程;insert 也不能阻止提示词注入(prompt injection)。--locked / --offline / --frozen 控制解析,不是文件系统沙箱。
阅读完整语义与边界 ↗解析器保留 XML 语义;规范二进制 XSIR 跨目标复用;链接器解析导入与重定位;发布器只提交完整的一代 .prompt / .psdbg。缓存可删除,不是权威项目状态。
project → resolve → XML → binary XSIR → link → .prompt + .psdbgDSL specification ↗v1.2 · DISTRIBUTION
.prompt从 entry 构造紧凑提示词。保持现有工作流,无需为了打包而改写每个入口。
面向调用 →02 · PACK.pack提示词、代码和静态资源一起交付。资源 bytes 不变,ZIP 成品可复现。
面向交付 →03 · SOPACK.sopack分发 IR、模块、宏和资源,不夹带成品。不可变库跨设备复用,来源身份随库重定位。
面向复用 →遥测默认关闭;按需记录在项目元数据,不影响可复现产物。