{"_id":"@1agents/mycontext","_rev":"4-32cdbd1bce4c5a659ed6f4763cb2799b","name":"@1agents/mycontext","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@1agents/mycontext","version":"0.1.0","keywords":["cli","sqlite","agent","local-first","tasks"],"license":"MIT","_id":"@1agents/mycontext@0.1.0","maintainers":[{"name":"scottzx","email":"xiaofengzeng93@outlook.com"}],"bin":{"mycontext":"bin/mycontext.js"},"dist":{"shasum":"58095faf6de07dd7c3615087fca0383b9b6149ab","tarball":"https://registry.npmjs.org/@1agents/mycontext/-/mycontext-0.1.0.tgz","fileCount":7,"integrity":"sha512-9ngq+iauc5P0MB8e70DVN2l2Temq1GA1K5D9obQ95vnP8XO8uWeySzjJj1VCVFCei5rUZZouLooaaUG/DBhgFQ==","signatures":[{"sig":"MEQCIDJAFsZXuIO6ZsKZFsCwKvufOPSFVuTTugRxjdh/HKD+AiAalsO5GXoPxDjMsemfb9Qim1TPfmc6go1AK1OBnq/jlA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38477},"type":"commonjs","engines":{"node":">=16"},"gitHead":"46229e9408c5df5a7008da2ed7e57b4658e8ec52","scripts":{"postinstall":"node bin/install.js"},"_npmUser":{"name":"scottzx","email":"xiaofengzeng93@outlook.com"},"_npmVersion":"11.17.0","description":"个人经营上下文系统 — deterministic local CLI for agent runtimes","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"optionalDependencies":{"@1agents/mycontext-linux-x64":"0.1.0","@1agents/mycontext-darwin-x64":"0.1.0","@1agents/mycontext-linux-ia32":"0.1.0","@1agents/mycontext-linux-arm64":"0.1.0","@1agents/mycontext-darwin-arm64":"0.1.0"},"_npmOperationalInternal":{"tmp":"tmp/mycontext_0.1.0_1787514568893_0.5102080646439269","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@1agents/mycontext","version":"0.2.0","keywords":["cli","sqlite","agent","local-first","tasks"],"license":"MIT","_id":"@1agents/mycontext@0.2.0","maintainers":[{"name":"scottzx","email":"xiaofengzeng93@outlook.com"}],"bin":{"mycontext":"bin/mycontext.js"},"dist":{"shasum":"6f729b654bae7d847c7e5db6297d89703a7edc11","tarball":"https://registry.npmjs.org/@1agents/mycontext/-/mycontext-0.2.0.tgz","fileCount":7,"integrity":"sha512-npB3aQJ4mivKqS7EdYTNZ5g5pJ8Vm7d9NqJ1a1ktv58iGTKSepfppTWuJaQhzr9+Cdzmh/ENC5bbouZk/Y4RAQ==","signatures":[{"sig":"MEYCIQDJDAswnOk7aAVevF4Y+NhV/ocjJXP44NsAa0ldBBmYQwIhAKUwLBW1kSxtBSRJTSTNQzRqWoOQZ89WT9Fmav6ltHiA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41152},"type":"commonjs","engines":{"node":">=16"},"gitHead":"57677b59dc5435877f7d4f6b83bb6122a4e31ecd","scripts":{"postinstall":"node bin/install.js"},"_npmUser":{"name":"scottzx","email":"xiaofengzeng93@outlook.com"},"_npmVersion":"11.17.0","description":"个人经营上下文系统 — deterministic local CLI for agent runtimes","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"optionalDependencies":{"@1agents/mycontext-linux-x64":"0.2.0","@1agents/mycontext-darwin-x64":"0.2.0","@1agents/mycontext-linux-ia32":"0.2.0","@1agents/mycontext-linux-arm64":"0.2.0","@1agents/mycontext-darwin-arm64":"0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/mycontext_0.2.0_1787536449285_0.11428169694464563","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@1agents/mycontext","version":"0.3.0","keywords":["cli","sqlite","agent","local-first","tasks"],"license":"MIT","_id":"@1agents/mycontext@0.3.0","maintainers":[{"name":"scottzx","email":"xiaofengzeng93@outlook.com"}],"bin":{"mycontext":"bin/mycontext.js"},"dist":{"shasum":"27e75675769db30f17c81f9cb741cb500b1ff43b","tarball":"https://registry.npmjs.org/@1agents/mycontext/-/mycontext-0.3.0.tgz","fileCount":7,"integrity":"sha512-cTHVE0hjE0ykGpuhrm2HKasYdnB1nqH3US2mYOLdpNMCHBc1JyXqRaFDkBe/E5mztnmpcHNAieu9x3Fu6YNpbQ==","signatures":[{"sig":"MEUCIQDp9NDOFR7cXO3BvqywfJY9thrng3AqfBKIIBJ0obiIZgIgN/04HCI9YYgMX1NTSVQmlvTMuoE5ynrbJdT9L9mlRLk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43080},"type":"commonjs","engines":{"node":">=16"},"gitHead":"02c602fa3e5ebe51c289d913eb8598858d436f6a","scripts":{"postinstall":"node bin/install.js"},"_npmUser":{"name":"scottzx","email":"xiaofengzeng93@outlook.com"},"_npmVersion":"11.17.0","description":"个人经营上下文系统 — deterministic local CLI for agent runtimes","directories":{},"_nodeVersion":"24.19.0","_hasShrinkwrap":false,"optionalDependencies":{"@1agents/mycontext-linux-x64":"0.3.0","@1agents/mycontext-darwin-x64":"0.3.0","@1agents/mycontext-linux-ia32":"0.3.0","@1agents/mycontext-linux-arm64":"0.3.0","@1agents/mycontext-darwin-arm64":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/mycontext_0.3.0_1787539808967_0.5838864686577863","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@1agents/mycontext","version":"0.4.0","description":"个人经营上下文系统 — deterministic local CLI for agent runtimes","keywords":["cli","sqlite","agent","local-first","tasks"],"license":"MIT","type":"commonjs","bin":{"mycontext":"bin/mycontext.js"},"scripts":{"postinstall":"node bin/install.js"},"engines":{"node":">=16"},"optionalDependencies":{"@1agents/mycontext-darwin-arm64":"0.4.0","@1agents/mycontext-darwin-x64":"0.4.0","@1agents/mycontext-linux-ia32":"0.4.0","@1agents/mycontext-linux-x64":"0.4.0","@1agents/mycontext-linux-arm64":"0.4.0"},"gitHead":"82067f89aa1b2e9138e6f83a180887c152a0851c","_id":"@1agents/mycontext@0.4.0","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-HFjJWP39RodOwdLhH1z4p1uKVzOIxWg9Em3ukZkBfLlcYSzgd8UaN4USt1H1N7uGwGEe8KBcJuWWYH12BOsrQw==","shasum":"4c1621c465ab2c029bede094d06970fe7ae2d801","tarball":"https://registry.npmjs.org/@1agents/mycontext/-/mycontext-0.4.0.tgz","fileCount":7,"unpackedSize":132777,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGcTcGpty814tA7y4wSxvEFY7N1YxR1/I4vfVmcsy7I1AiBFUU9CjNe4yhqPyD9D7yMm0wD2aI9R2LW/pvC/XA3UDQ=="}]},"_npmUser":{"name":"scottzx","email":"xiaofengzeng93@outlook.com"},"directories":{},"maintainers":[{"name":"scottzx","email":"xiaofengzeng93@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mycontext_0.4.0_1787843450221_0.10080621029951442"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-23T19:49:28.762Z","modified":"2026-08-27T15:10:50.504Z","0.1.0":"2026-08-23T19:49:29.034Z","0.2.0":"2026-08-24T01:54:09.430Z","0.3.0":"2026-08-24T02:50:09.117Z","0.4.0":"2026-08-27T15:10:50.354Z"},"license":"MIT","keywords":["cli","sqlite","agent","local-first","tasks"],"description":"个人经营上下文系统 — deterministic local CLI for agent runtimes","maintainers":[{"name":"scottzx","email":"xiaofengzeng93@outlook.com"}],"readme":"# mycontext — 个人经营上下文系统 · 确定性内核\n\nGo 实现的本地 CLI，对应两份设计文档：\n\n- [个人经营上下文系统 B+](docs/个人经营上下文系统_B+_设计.md) — 领域模型\n- [Go CLI 与静态前端技术架构](docs/个人经营上下文系统_GoCLI与静态前端_技术设计.md) — 技术边界\n\n每次调用都是短生命周期进程：解析参数 → 定位 `MYCONTEXT_ROOT` → 只打开本命令需要的数据 →\n执行 → 退出。没有 daemon，没有常驻端口。\n\n## 当前实现范围\n\n已完成技术分册的 **Phase 1（只读 CLI 骨架）**、**Phase 2（`ops.db v2` 与写入协议）**、\n**Phase 5（npm 分发）**、**Phase 6 迁移的 `ops.db v3` 与旧 OKR 树导入**，以及 agent 接入层；\n**Phase 4 静态前端仅完成 localhost adapter**（只读，`mycontext ui serve`）。\nSnapshot / Minis Bridge 两种 adapter、Library capture、`context.db` 尚未开始，见文末。\n\n## 要素与关系\n\n`ops.db v3` 只承认三种要素：**project 承载工作、task 是可执行动作、milestone 是工作\n瞄准的那个日期**。其余项目管理概念都由扩展字段和关系边表达，不新开实体——所以既有的\n列表、过滤和命令不改一行就同时认识它们：\n\n| 概念 | 落点 |\n|---|---|\n| 父子项目 | `projects.parent_project_id` |\n| 冲刺 | `projects.kind = 'sprint'` + `start_date` / `end_date`（必须有父项目） |\n| 父子任务 | `tasks.parent_task_id` |\n| 里程碑 | `milestones` 表，`target_date` 非空 |\n| 里程碑下的工作 | `tasks.milestone_id` —— 里程碑拥有瞄准它的任务 |\n| 关联 / 依赖 | `dependencies`——关系是边不是要素，两端各自声明类型，可跨层级 |\n| 量化 | `metric_name` / `metric_unit` / `target_value` / `current_value` 在 KR、项目、里程碑、任务各有一份 |\n| 标签 | `tags(entity_type, entity_id, tag)` |\n\n**里程碑为什么不是 task**：它不可执行、不占容量、没有工时——把它塞进任务列表会让\n\"今天要做什么\"和\"这个日期要到了\"混成一件事。它有自己的状态机\n（`pending / at_risk / hit / missed / cancelled`），`v_milestones` 直接回答\n\"这个日期会不会兑现\"：底下挂了几个任务、完成几个、还剩多少分钟的活。挂零个任务的\n里程碑会进数据质量清单——**没有工作支撑的日期不会自己到来**。改里程碑日期和改任务\n硬截止一样，必须给 `--reason`。\n\n量化是三层汇总：`v_metric_rollup` 同时给出**本层声明值**和**同名 metric 的子项累加值**，\n两者不一致时只陈述事实，不覆盖用户填的数——和超载的处理方式一致。\n\n## 快速开始\n\n```bash\nmake build\n./build/mycontext --root /path/to/instance init\n```\n\n```bash\n./build/mycontext --root /path/to/instance ops status\n```\n\n## 命令面\n\n| 命令 | 作用 |\n|---|---|\n| `init` / `version` / `doctor` | 实例创建、版本报告、pass/warn/fail 体检 |\n| `schema status\\|plan\\|migrate` | 迁移检查与应用（migrate 前自动快照） |\n| `backup create\\|verify` | 一致性快照与恢复校验 |\n| `ops status` | 今天 / 明天 / 未来七天 / 逾期 / 待复查 / 超载 / 数据质量 |\n| `task list\\|get\\|create\\|update\\|reschedule\\|complete\\|set-review` | 任务与计划 |\n| `project list\\|get\\|create\\|update\\|link-kr\\|tree` | 项目与 Area→Initiative→Project 导航 |\n| `area create` / `initiative create` | 层级维护 |\n| `objective create\\|list` / `kr create\\|update` | 目标与量化（KR 携带唯一度量定义） |\n| `milestone create\\|list\\|update` | 日期检查点与瞄准它的任务 |\n| `dep add\\|list` | 任意两个节点之间的依赖边 |\n| `tag set\\|list` | 任意节点上的标签 |\n| `import okr` | 导入旧 OKR 树（默认预演，`--confirm` 才写） |\n| `schedule day\\|week` | 日 / 周看板 |\n| `capacity set` | 声明某天可用分钟 |\n| `event list` | 审计轨迹 |\n| `catalog` | 输出机器可读的操作目录，供 agent 发现能力 |\n| `ui serve` | 本地只读 dashboard（127.0.0.1，随机端口，前台运行） |\n\n## 作为 agent 插件使用\n\n主路径是 **CLI 调用**：任何具备 shell 工具的 agent runtime（Claude Code、Codex、\n手机上的 Minis）都能直接用，不需要额外适配层。MCP 不进第一阶段——MCP server 无论\nstdio 还是 HTTP 都是会话期常驻进程，而 iSH 恰好不能常驻。\n\n- [`agent/USAGE.md`](agent/USAGE.md) — 给模型读的完整调用契约（运行时无关）\n- [`agent/SKILL.md`](agent/SKILL.md) — Claude Code skill 挂载点，指向上面那份\n- `mycontext catalog --format json` — 从活的命令树生成，不会与实际命令漂移\n\n```bash\nnpm install -g @1agents/mycontext\nmycontext init\nmycontext --format json ops status\n```\n\n安装后 postinstall 会把 npm 的 bin 入口直接指向原生二进制，`mycontext` 只有一次 exec，\n不经过 Node 启动（重命名前用 `@minis/context` 实测 190ms → 15ms，机制未变）。\n若该步骤失败，会退回 Node launcher，行为相同只是启动慢一些。\n\n## 写入协议\n\n所有写入走同一条管线（技术分册 §11.2、§14）：\n\n1. 校验枚举、日期、对象存在性 — 失败返回 `BAD_INPUT`，不落到驱动约束错误。\n2. 幂等：相同 `request_id` + payload 重放首次结果；payload 不同返回 `IDEMPOTENCY_CONFLICT`。\n3. 乐观并发：`expected_version` 不匹配返回 `VERSION_CONFLICT`，禁止 last-write-wins。\n4. 单一短事务内更新状态表并写 `events`。\n5. 返回变更摘要与 `projection_keys`，前端只刷新受影响区域。\n\n`--dry-run` 计算真实结果后回滚，且不占用 `request_id`。\n\n### 退出码\n\n| 码 | 含义 | | 码 | 含义 |\n|---:|---|---|---:|---|\n| 0 | 成功 | | 6 | 数据库忙 |\n| 2 | 参数错误 | | 7 | 需要确认 |\n| 3 | 对象不存在 | | 8 | 完整性失败 |\n| 4 | 歧义或版本冲突 | | 9 | 外部获取失败 |\n| 5 | schema 不兼容 | | 10 | 需要恢复 |\n\nAgent 应先判断退出码与 `error.code`，不要解析错误文本。\n\n## 不会静默丢失事项\n\n设计的核心不是 AI 排程，而是状态透明、调整成本低、事项不丢失。落到实现：\n\n- **改期不覆盖**：旧 `task_schedules` 标记 `superseded` 并指向替代记录，新记录另起一行；\n  `task_id` 上的部分唯一索引保证任一时刻只有一条 active 计划。\n- **暂缓不消失**：`set-review` 取消当前计划但写入 `next_review_at`，任务进入 `v_review_due`。\n- **暂停项目必须有复查时间**，否则拒绝写入。\n- **改硬截止必须给 `--reason`**，并单独记 `deadline_changed` 事件。\n- **超载只陈述事实**：任务数、计划分钟、可用分钟、超载分钟；系统不替用户挑要删的事。\n- 默认容量会被明确标注为 `default capacity`，不冒充用户声明。\n\n## 时区\n\n确定性视图用 SQLite 的 `localtime` 判断\"今天\"。CLI 启动时按实例配置的时区\n（默认 `Asia/Shanghai`）设置进程时区，因此视图里的自然日就是用户声明的自然日，\n而不是宿主机恰好设置成什么。\n\n## 数据布局\n\n可执行程序与数据分离；升级二进制不触碰数据（技术分册 §8.1）：\n\n```text\nMYCONTEXT_ROOT/\n├── system/        config.json · staging · recovery\n├── data/          ops.db（context.db / health.db / finance.db 待建）\n├── library/       YYYY/MM/DD/cap_... · _system/{orphaned,quarantine,trash}\n├── snapshots/     一致性快照\n├── exports/       离线导出\n└── logs/\n```\n\n根目录解析顺序：`--root` → `MYCONTEXT_ROOT` → 向上查找 `.mycontext-root.json` → 平台默认\n（iSH 为 `/var/minis/shared`，桌面平台为 `~/.1agents/mycontext`——挂在 `@1agents`\n产品族共享的本地数据命名空间下，不是裸的 `~/.mycontext` dotfile）。每条结果的\n`meta.root` 都会回报实际使用的实例。\n\n## 本地 Web UI（localhost adapter）\n\n```bash\nmycontext ui serve\n```\n\n绑死 `127.0.0.1` 上的随机端口（技术分册 §16.3：`不监听局域网地址`），打印带一次性\nsession token 的 URL。前端首次加载时从 URL 读 token、从地址栏抹掉，之后所有请求\n走自定义 header `X-Mycontext-Token` 携带；服务端同时校验 Origin/Host，拒绝跨源请求。\n\n前台运行，Ctrl-C 或空闲超时（默认 30 分钟，`--idle-timeout` 可调）即退出——不是\ndaemon。只读：这一轮只暴露 `ops.status`、`project.tree` 两个白名单查询操作\n（technical §16.1：`不为每张数据库表建立 CRUD HTTP API，也不提供通用 SQL endpoint`），\n没有写入端点。\n\n### API 契约（给要直接调 HTTP 接口的人，不是给 agent 的——见下）\n\n真实调用示例，几个容易踩的点直接摊开写：\n\n```bash\ncurl -H \"X-Mycontext-Token: <token>\" \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"operation\":\"ops.status\",\"input\":{}}' \\\n     http://127.0.0.1:<port>/api/v1/invoke\n```\n\n- **`operation` 用点号规范名**（`ops.status`、`project.tree`），**不是** CLI 的空格子命令\n  形式（`ops status`）。两者是同一操作的两种表示，不能互换——点号名来自\n  `mycontext catalog` 输出的 `name` 字段，命令行输入的是 `Use` 里的空格形式。\n- **鉴权走 `X-Mycontext-Token` header，不是 query string。** 启动时打印的\n  `http://127.0.0.1:PORT/?token=xxx` 里那个 `token` 只是给浏览器首次打开用的\n  一次性引导值——前端 JS 读到后立刻从地址栏 `history.replaceState` 抹掉（见下），\n  之后所有 `/api/v1/*` 请求全部走 header。**直接拿 URL 里的 token 去拼 query 参数\n  发请求是不认的**，服务端只认 header。\n- **当前 capabilities 只有这两个只读操作，没有更多。** `task`/`project` 的写操作、\n  `backup`、`schema migrate` 等命令都没有暴露到这个 HTTP 接口，也不打算在这一轮加——\n  写操作走 CLI（人或 agent 直接调 `mycontext ...`），UI 这边保持\"只读展示\"，两条路\n  分工明确，不是漏做了忘加。`GET /api/v1/capabilities` 会如实报告当前只有\n  `[\"ops.status\", \"project.tree\"]`，别假设还有别的操作能调。\n\n**agent 不需要、也不应该调这个 HTTP 接口** ——agent 的调用契约是 CLI（见\n[`agent/USAGE.md`](agent/USAGE.md)），这个 API 是给浏览器前端用的本地传输层。\n\n前端是 `web/` 下的 Vite + React + TypeScript 静态站点，构建产物通过 `//go:embed`\n打进二进制（`make web` 生成 `web/dist`，`make build` 自动依赖它）；仓库里只提交一个\n占位 `web/dist/index.html`，保证裸 `go build`/`go vet`/`go test` 不依赖 Node 也能过——\nembed 目录必须存在且非空，这是唯一原因。\n\nDataSource 契约（`web/src/datasource.ts`）是这一层唯一的耦合面：组件只调用\n`query(operation, input)`，不知道数据经由 localhost 还是（以后的）Snapshot/Bridge\n传输。换 adapter 只需新写一个实现同一接口的文件。\n\n## 导入旧 OKR 树\n\n```bash\nmycontext import okr /path/to/tasks.db\n```\n\n只读打开源库，报告它**将要**写什么，包括每一处不得不做的字段映射；不加 `--confirm`\n不写任何东西。整棵树在**一个进程、一个事务**里迁入——125 个节点不能是 125 次进程，\n在 iSH 上这是能用和不能用的区别。\n\n映射里两处是刻意的：\n\n- **优先级两套词表不静默合并**。旧库 `critical/high/med/low` 与 `P0..P3` 混用，\n  映射关系写在报告里，必须 `--confirm` 才生效（`internal/ops/model.go` 的设计注记）。\n- **任务的 `due_date` 落到 `legacy_due_date`，不猜它是什么**。旧库的一个日期可能是\n  硬截止、目标日或计划日；系统不替你分类，而是把它们全部列进\n  `v_data_quality_issues` 的 `legacy_due_date_unclassified` 等你处理。\n- **task → milestone 的关联是推导出来的，会逐条列给你看**。旧库没有这一列，唯一\n  诚实的信号是\"同项目 + 同日期\"。预演时把每一对配对完整打印出来，`--confirm` 才写；\n  一个任务同时命中多个里程碑就留空不猜。\n\n## 构建\n\n```bash\nmake release\n```\n\nCGo-free，任意宿主可交叉编译全部首批平台；`linux/386`（iSH）为必须目标。\n\n## 尚未实现\n\n按技术分册的阶段顺序，以下尚未开始：\n\n- **Phase 3 Library Capture** — Capture Package / Item / Version / Component / Asset、\n  manifest、staging→sealed 可恢复提交与崩溃恢复矩阵\n- **`context.db`** — sources、inbox_items、entities、facts、evidence、domain_links\n- **Phase 4 静态前端** — Snapshot / Minis Bridge 两种 adapter（localhost 已完成，见上）；\n  写入未开放（B+ 设计：先只读，再单任务改期，最后批量/agent 写入）\n- **Phase 6 迁移的余下部分** — `import okr` 已可整树迁入（见下），但导入后的\n  `legacy_due_date` 需要逐条分类为硬截止 / 目标日 / 计划日，尚无批量分类命令\n- `mycontext ui export`、`mycontext verify`\n- `ui serve` 页面还没有在真实浏览器里做过可视化验证（本机 Chrome 扩展未连接，\n  只验证到 API/HTML/TS 编译层面）\n- 未在真实 iSH 上安装验证（npm 包已发布：`npm install -g @1agents/mycontext`）\n\nPhase 0（真实 iSH 设备资格确认与基准）需要在真机上执行，尚未进行。\n","readmeFilename":"README.md"}