mellos-mapping 0.20.2 → 0.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +125 -88
  2. package/README.zh-CN.md +122 -84
  3. package/dist/hook-session-start.mjs +25 -19
  4. package/dist/mmap.mjs +302 -170
  5. package/dist/preview.mjs +1418 -0
  6. package/dist/server.mjs +1198 -400
  7. package/dist/store-paths.mjs +40 -21
  8. package/dist/terminal-worker.mjs +3188 -0
  9. package/dist/watch.mjs +523 -280
  10. package/dist/web/TERMINAL-LICENSES.txt +70 -0
  11. package/dist/web/app.css +967 -0
  12. package/dist/web/app.js +1356 -0
  13. package/dist/web/index.html +9 -0
  14. package/dist/web/terminal.css +9 -0
  15. package/dist/web/terminal.html +7 -0
  16. package/dist/web/terminal.js +9293 -0
  17. package/dist/web/xterm.css +285 -0
  18. package/dist/web.mjs +5535 -0
  19. package/docs/codex.md +183 -0
  20. package/lib/domain/text.d.ts +9 -0
  21. package/lib/domain/text.js +43 -0
  22. package/lib/domain/types.js +10 -1
  23. package/lib/preview/index.d.ts +3 -0
  24. package/lib/preview/index.js +3 -0
  25. package/lib/preview/markdown.d.ts +8 -0
  26. package/lib/preview/markdown.js +54 -0
  27. package/lib/preview/presentation.d.ts +6 -0
  28. package/lib/preview/presentation.js +14 -0
  29. package/lib/preview/publisher.d.ts +23 -0
  30. package/lib/preview/publisher.js +143 -0
  31. package/lib/preview/svg.d.ts +3 -0
  32. package/lib/preview/svg.js +74 -0
  33. package/lib/preview/text.d.ts +4 -0
  34. package/lib/preview/text.js +13 -0
  35. package/lib/render/canvas.d.ts +1 -1
  36. package/lib/render/canvas.js +4 -2
  37. package/lib/render/draw.js +9 -6
  38. package/lib/render/render.d.ts +6 -0
  39. package/lib/render/render.js +50 -18
  40. package/lib/render/width.js +3 -1
  41. package/lib/store/atomic.d.ts +18 -0
  42. package/lib/store/atomic.js +86 -0
  43. package/lib/store/channels.d.ts +40 -0
  44. package/lib/store/channels.js +135 -0
  45. package/lib/store/format.js +3 -1
  46. package/lib/store/json-text.d.ts +9 -0
  47. package/lib/store/json-text.js +16 -0
  48. package/lib/store/maps.d.ts +12 -0
  49. package/lib/store/maps.js +42 -0
  50. package/lib/store/migration.d.ts +12 -0
  51. package/lib/store/migration.js +46 -0
  52. package/lib/store/pages.d.ts +46 -0
  53. package/lib/store/pages.js +89 -0
  54. package/lib/store/policy.d.ts +74 -0
  55. package/lib/store/policy.js +144 -0
  56. package/lib/store/store.d.ts +9 -256
  57. package/lib/store/store.js +10 -694
  58. package/lib/store/viewers.d.ts +81 -0
  59. package/lib/store/viewers.js +186 -0
  60. package/package.json +25 -6
  61. package/scripts/codex-cli.mjs +42 -0
  62. package/scripts/codex-register.mjs +27 -94
  63. package/scripts/mmap.mjs +26 -16
  64. package/scripts/open-pane.mjs +37 -18
  65. package/scripts/pane-core.mjs +57 -220
  66. package/scripts/terminal-session.mjs +137 -0
  67. package/scripts/tmux-session.mjs +90 -0
  68. package/scripts/watcher-command.mjs +16 -0
@@ -1,7 +1,3 @@
1
- // src/store/store.ts
2
- import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
3
- import { basename, dirname, join } from "node:path";
4
-
5
1
  // src/domain/types.ts
6
2
  var ok = (value) => ({ ok: true, value });
7
3
  var err = (error) => ({ ok: false, error });
@@ -16,30 +12,32 @@ function makePageId(raw) {
16
12
  return ID_RULE.test(raw) ? ok(raw) : err({ kind: "invalid-id", raw, rule: ID_RULE_TEXT });
17
13
  }
18
14
 
19
- // src/store/store.ts
15
+ // src/store/pages.ts
16
+ import { basename, dirname, join } from "node:path";
17
+ var STORE_DIR_NAME = ".mellos";
18
+ var STATE_FILE_RELATIVE_PATH = join(STORE_DIR_NAME, "map.json");
19
+ var PAGES_DIR_NAME = "pages";
20
+
21
+ // src/store/channels.ts
22
+ import { dirname as dirname3, join as join3 } from "node:path";
23
+
24
+ // src/store/json-text.ts
20
25
  function isRecord(v) {
21
26
  return typeof v === "object" && v !== null && !Array.isArray(v);
22
27
  }
23
28
  function stripBom(text) {
24
29
  return text.charCodeAt(0) === 65279 ? text.slice(1) : text;
25
30
  }
26
- var STORE_DIR_NAME = ".mellos";
27
- var STATE_FILE_RELATIVE_PATH = join(STORE_DIR_NAME, "map.json");
28
- var PAGES_DIR_NAME = "pages";
29
- var FOCUS_FILE_NAME = "focus";
30
- function focusFilePath(defaultFile) {
31
- return join(dirname(defaultFile), FOCUS_FILE_NAME);
32
- }
33
- var QUIT_FILE_NAME = "quit";
34
- function quitFilePath(defaultFile) {
35
- return join(dirname(defaultFile), QUIT_FILE_NAME);
36
- }
31
+
32
+ // src/store/viewers.ts
33
+ import { readdirSync, readFileSync, statSync, rmSync } from "node:fs";
34
+ import { dirname as dirname2, join as join2 } from "node:path";
37
35
  var VIEWERS_DIR_NAME = "viewers";
38
36
  var VIEWER_FILE_VERSION = 1;
39
37
  var VIEWER_STALE_MS = 5e3;
40
38
  var VIEWER_SWEEP_MS = 6e4;
41
39
  function viewersDirPath(defaultFile) {
42
- return join(dirname(defaultFile), VIEWERS_DIR_NAME);
40
+ return join2(dirname2(defaultFile), VIEWERS_DIR_NAME);
43
41
  }
44
42
  function viewerPidOf(fileName) {
45
43
  const m = /^(\d+)\.json$/.exec(fileName);
@@ -56,11 +54,14 @@ function parseViewerReport(raw) {
56
54
  if (parsed["version"] !== VIEWER_FILE_VERSION) return void 0;
57
55
  const follow = parsed["follow"];
58
56
  if (typeof follow !== "boolean") return void 0;
57
+ const owner = parsed["owner"];
58
+ if (owner !== void 0 && (typeof owner !== "string" || !makePageId(owner).ok)) return void 0;
59
+ const binding = owner === void 0 ? {} : { owner };
59
60
  const page = parsed["page"];
60
- if (page === null || page === void 0) return { page: void 0, follow };
61
+ if (page === null || page === void 0) return { page: void 0, follow, ...binding };
61
62
  if (typeof page !== "string") return void 0;
62
63
  const id = makePageId(page);
63
- return id.ok ? { page: id.value, follow } : void 0;
64
+ return id.ok ? { page: id.value, follow, ...binding } : void 0;
64
65
  }
65
66
  function readLiveViewers(defaultFile, nowMs) {
66
67
  const dir = viewersDirPath(defaultFile);
@@ -74,7 +75,7 @@ function readLiveViewers(defaultFile, nowMs) {
74
75
  for (const name of names) {
75
76
  const pid = viewerPidOf(name);
76
77
  if (pid === void 0) continue;
77
- const path = join(dir, name);
78
+ const path = join2(dir, name);
78
79
  let raw;
79
80
  let ageMs;
80
81
  try {
@@ -93,7 +94,25 @@ function readLiveViewers(defaultFile, nowMs) {
93
94
  }
94
95
  return live.sort((a, b) => a.ageMs - b.ageMs || a.pid - b.pid);
95
96
  }
96
- var LEGACY_STATE_FILE_RELATIVE_PATH = join(".claude", "mellos-mapping.json");
97
+
98
+ // src/store/channels.ts
99
+ var FOCUS_FILE_NAME = "focus";
100
+ function focusFilePath(defaultFile, pid) {
101
+ return paneChannelPath(defaultFile, FOCUS_FILE_NAME, pid);
102
+ }
103
+ function paneChannelPath(defaultFile, channel, pid) {
104
+ if (pid === void 0) return join3(dirname3(defaultFile), channel);
105
+ if (!Number.isSafeInteger(pid) || pid <= 0) throw new Error("Invalid pane process id");
106
+ return join3(viewersDirPath(defaultFile), `${pid}.${channel}`);
107
+ }
108
+ var QUIT_FILE_NAME = "quit";
109
+ function quitFilePath(defaultFile, pid) {
110
+ return paneChannelPath(defaultFile, QUIT_FILE_NAME, pid);
111
+ }
112
+
113
+ // src/store/migration.ts
114
+ import { dirname as dirname4, join as join4 } from "node:path";
115
+ var LEGACY_STATE_FILE_RELATIVE_PATH = join4(".claude", "mellos-mapping.json");
97
116
  export {
98
117
  FOCUS_FILE_NAME,
99
118
  ID_RULE,