feat: unify alias and variable — all hash params accept variable names #16

Closed
opened 2026-06-01 09:56:48 +00:00 by xiaoju · 1 comment
Owner

What

废除 alias 概念,统一为 variable。所有接受 hash 的地方都可以接受 variable name。

Why

现在 @ocas/* alias 和 variable 是两套系统:alias 是 bootstrap 返回的内存 map,variable 是 SQLite 里的可变指针。实际上 alias 就是 "name → hash" 的映射,和 variable 完全一回事。统一后:

  • 少一个概念,少一套代码路径
  • ocas var list @ocas/ 可以看到所有内置类型
  • 用户自定义的 @myapp/user 和内置的 @ocas/string 走完全相同的解析路径
  • 所有命令天然支持 name → hash 解析

Design

Bootstrap 改造

bootstrap() 不再返回 builtinSchemas map,改为直接写入 variable store:

var set @ocas/schema <meta-schema-hash>
var set @ocas/string <string-schema-hash>
var set @ocas/number <number-schema-hash>
...
var set @ocas/output/put <put-envelope-hash>
...

统一 hash 解析

所有接受 hash 的命令参数,都先尝试 resolve:

resolveHash(input):
  if input matches /^[0-9A-Z]{13}$/ → return input (raw hash)
  else → lookup variable by name, return variable.value

影响的命令:put, get, has, hash, verify, refs, walk, render, list --type, var get --schema, var delete --schema, template set/get/delete

用户体验

# 内置 alias 就是 variable
ocas var list @ocas/          # 列出所有内置类型
ocas put @ocas/string data.json  # 和以前一样

# 用户自定义 alias
ocas var set @myapp/user <schema-hash>
ocas put @myapp/user data.json   # 直接用
ocas get @myapp/config            # get 也能用 name

# 查看、管理
ocas var list @myapp/
ocas var delete @myapp/user

Namespace 保护

已有机制不变:var setvar delete 拒绝 @ocas/ 前缀,只有 bootstrap 内部通过 varStore.set() 直接写入。

Implementation

  1. bootstrap() 签名改造 — 接受 varStore 参数,内置 schema 写入 variable store
  2. 删除 builtinSchemas map — 不再需要内存中的 alias 表
  3. resolveTypeHash()resolveHash() — 通用化,从 varStore 查询
  4. 所有命令的 hash 参数过 resolveHash()
  5. 更新 knowledge cards — 去掉 alias 概念描述
  6. 更新 tests

Breaking Change

  • bootstrap() 函数签名变化(需要传 varStore)
  • 返回值变化(不再返回 builtinSchemas map)

小橘 🍊(NEKO Team)

## What 废除 alias 概念,统一为 variable。所有接受 hash 的地方都可以接受 variable name。 ## Why 现在 `@ocas/*` alias 和 variable 是两套系统:alias 是 bootstrap 返回的内存 map,variable 是 SQLite 里的可变指针。实际上 alias 就是 "name → hash" 的映射,和 variable 完全一回事。统一后: - 少一个概念,少一套代码路径 - `ocas var list @ocas/` 可以看到所有内置类型 - 用户自定义的 `@myapp/user` 和内置的 `@ocas/string` 走完全相同的解析路径 - 所有命令天然支持 name → hash 解析 ## Design ### Bootstrap 改造 `bootstrap()` 不再返回 `builtinSchemas` map,改为直接写入 variable store: ``` var set @ocas/schema <meta-schema-hash> var set @ocas/string <string-schema-hash> var set @ocas/number <number-schema-hash> ... var set @ocas/output/put <put-envelope-hash> ... ``` ### 统一 hash 解析 所有接受 hash 的命令参数,都先尝试 resolve: ``` resolveHash(input): if input matches /^[0-9A-Z]{13}$/ → return input (raw hash) else → lookup variable by name, return variable.value ``` 影响的命令:`put`, `get`, `has`, `hash`, `verify`, `refs`, `walk`, `render`, `list --type`, `var get --schema`, `var delete --schema`, `template set/get/delete` ### 用户体验 ```bash # 内置 alias 就是 variable ocas var list @ocas/ # 列出所有内置类型 ocas put @ocas/string data.json # 和以前一样 # 用户自定义 alias ocas var set @myapp/user <schema-hash> ocas put @myapp/user data.json # 直接用 ocas get @myapp/config # get 也能用 name # 查看、管理 ocas var list @myapp/ ocas var delete @myapp/user ``` ### Namespace 保护 已有机制不变:`var set` 和 `var delete` 拒绝 `@ocas/` 前缀,只有 bootstrap 内部通过 `varStore.set()` 直接写入。 ## Implementation 1. **`bootstrap()` 签名改造** — 接受 varStore 参数,内置 schema 写入 variable store 2. **删除 `builtinSchemas` map** — 不再需要内存中的 alias 表 3. **`resolveTypeHash()` → `resolveHash()`** — 通用化,从 varStore 查询 4. **所有命令的 hash 参数过 `resolveHash()`** 5. **更新 knowledge cards** — 去掉 alias 概念描述 6. **更新 tests** ## Breaking Change - `bootstrap()` 函数签名变化(需要传 varStore) - 返回值变化(不再返回 builtinSchemas map) 小橘 🍊(NEKO Team)
Author
Owner

All items implemented: bootstrap writes to varStore, alias concept removed, all hash params go through resolveHash(), @ocas/* namespace protected. Closing.

小橘 🍊(NEKO Team)

All items implemented: bootstrap writes to varStore, alias concept removed, all hash params go through `resolveHash()`, `@ocas/*` namespace protected. Closing. 小橘 🍊(NEKO Team)
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shazhou/ocas#16