@dorokuma/herdsman 0.9.0 → 0.11.5

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 (122) hide show
  1. package/README.ja.md +4 -2
  2. package/README.md +5 -3
  3. package/dist/src/agent-history/antigravity-proto.js +1 -1
  4. package/dist/src/agent-history/antigravity-proto.js.map +1 -1
  5. package/dist/src/agent-history/antigravity-reader.d.ts +13 -1
  6. package/dist/src/agent-history/antigravity-reader.d.ts.map +1 -1
  7. package/dist/src/agent-history/antigravity-reader.js +22 -1
  8. package/dist/src/agent-history/antigravity-reader.js.map +1 -1
  9. package/dist/src/agent-history/discovery.d.ts +8 -2
  10. package/dist/src/agent-history/discovery.d.ts.map +1 -1
  11. package/dist/src/agent-history/discovery.js +89 -9
  12. package/dist/src/agent-history/discovery.js.map +1 -1
  13. package/dist/src/agent-history/readers.d.ts +15 -1
  14. package/dist/src/agent-history/readers.d.ts.map +1 -1
  15. package/dist/src/agent-history/readers.js +77 -31
  16. package/dist/src/agent-history/readers.js.map +1 -1
  17. package/dist/src/agent-history/service.d.ts +4 -2
  18. package/dist/src/agent-history/service.d.ts.map +1 -1
  19. package/dist/src/agent-history/service.js +22 -22
  20. package/dist/src/agent-history/service.js.map +1 -1
  21. package/dist/src/agent-history/source-fingerprint.d.ts +7 -0
  22. package/dist/src/agent-history/source-fingerprint.d.ts.map +1 -0
  23. package/dist/src/agent-history/source-fingerprint.js +26 -0
  24. package/dist/src/agent-history/source-fingerprint.js.map +1 -0
  25. package/dist/src/agent-history/text.d.ts.map +1 -1
  26. package/dist/src/agent-history/text.js +5 -0
  27. package/dist/src/agent-history/text.js.map +1 -1
  28. package/dist/src/cli/herdsman.d.ts.map +1 -1
  29. package/dist/src/cli/herdsman.js +31 -9
  30. package/dist/src/cli/herdsman.js.map +1 -1
  31. package/dist/src/daemon/agent-event-reconciler.d.ts +25 -4
  32. package/dist/src/daemon/agent-event-reconciler.d.ts.map +1 -1
  33. package/dist/src/daemon/agent-event-reconciler.js +84 -6
  34. package/dist/src/daemon/agent-event-reconciler.js.map +1 -1
  35. package/dist/src/daemon/herdr-session-watch-manager.d.ts +1 -0
  36. package/dist/src/daemon/herdr-session-watch-manager.d.ts.map +1 -1
  37. package/dist/src/daemon/herdr-session-watch-manager.js +176 -55
  38. package/dist/src/daemon/herdr-session-watch-manager.js.map +1 -1
  39. package/dist/src/daemon/observability-server.d.ts +3 -0
  40. package/dist/src/daemon/observability-server.d.ts.map +1 -1
  41. package/dist/src/daemon/observability-server.js +73 -24
  42. package/dist/src/daemon/observability-server.js.map +1 -1
  43. package/dist/src/daemon/process-manager.d.ts +41 -2
  44. package/dist/src/daemon/process-manager.d.ts.map +1 -1
  45. package/dist/src/daemon/process-manager.js +340 -19
  46. package/dist/src/daemon/process-manager.js.map +1 -1
  47. package/dist/src/daemon/service.d.ts +46 -0
  48. package/dist/src/daemon/service.d.ts.map +1 -1
  49. package/dist/src/daemon/service.js +172 -12
  50. package/dist/src/daemon/service.js.map +1 -1
  51. package/dist/src/db/agent-events.d.ts +34 -1
  52. package/dist/src/db/agent-events.d.ts.map +1 -1
  53. package/dist/src/db/agent-events.js +168 -28
  54. package/dist/src/db/agent-events.js.map +1 -1
  55. package/dist/src/db/agent-history-cache.d.ts +4 -0
  56. package/dist/src/db/agent-history-cache.d.ts.map +1 -1
  57. package/dist/src/db/agent-history-cache.js +27 -0
  58. package/dist/src/db/agent-history-cache.js.map +1 -1
  59. package/dist/src/db/agent-orchestrator-scopes.d.ts +8 -0
  60. package/dist/src/db/agent-orchestrator-scopes.d.ts.map +1 -1
  61. package/dist/src/db/agent-orchestrator-scopes.js +13 -0
  62. package/dist/src/db/agent-orchestrator-scopes.js.map +1 -1
  63. package/dist/src/db/agents.d.ts +44 -0
  64. package/dist/src/db/agents.d.ts.map +1 -1
  65. package/dist/src/db/agents.js +91 -5
  66. package/dist/src/db/agents.js.map +1 -1
  67. package/dist/src/db/client.d.ts +1 -0
  68. package/dist/src/db/client.d.ts.map +1 -1
  69. package/dist/src/db/client.js +12 -0
  70. package/dist/src/db/client.js.map +1 -1
  71. package/dist/src/db/schema.d.ts +391 -0
  72. package/dist/src/db/schema.d.ts.map +1 -1
  73. package/dist/src/db/schema.js +34 -0
  74. package/dist/src/db/schema.js.map +1 -1
  75. package/dist/src/db/status-event-plans.d.ts +62 -0
  76. package/dist/src/db/status-event-plans.d.ts.map +1 -0
  77. package/dist/src/db/status-event-plans.js +147 -0
  78. package/dist/src/db/status-event-plans.js.map +1 -0
  79. package/dist/src/herdr/pane-identity-resolver.d.ts +4 -0
  80. package/dist/src/herdr/pane-identity-resolver.d.ts.map +1 -1
  81. package/dist/src/herdr/pane-identity-resolver.js +13 -1
  82. package/dist/src/herdr/pane-identity-resolver.js.map +1 -1
  83. package/dist/src/herdr/socket-client.d.ts +2 -0
  84. package/dist/src/herdr/socket-client.d.ts.map +1 -1
  85. package/dist/src/herdr/socket-client.js +64 -20
  86. package/dist/src/herdr/socket-client.js.map +1 -1
  87. package/dist/src/observability/agent-context-service.d.ts +17 -1
  88. package/dist/src/observability/agent-context-service.d.ts.map +1 -1
  89. package/dist/src/observability/agent-context-service.js +85 -21
  90. package/dist/src/observability/agent-context-service.js.map +1 -1
  91. package/dist/src/observability/agent-index-service.d.ts +47 -2
  92. package/dist/src/observability/agent-index-service.d.ts.map +1 -1
  93. package/dist/src/observability/agent-index-service.js +1125 -115
  94. package/dist/src/observability/agent-index-service.js.map +1 -1
  95. package/dist/src/observability/agent-orchestrator-service.d.ts.map +1 -1
  96. package/dist/src/observability/agent-orchestrator-service.js +34 -12
  97. package/dist/src/observability/agent-orchestrator-service.js.map +1 -1
  98. package/dist/src/observability/contracts.d.ts +2 -1
  99. package/dist/src/observability/contracts.d.ts.map +1 -1
  100. package/dist/src/observability/contracts.js.map +1 -1
  101. package/dist/src/observability/interactive-pi.d.ts +1 -1
  102. package/dist/src/observability/interactive-pi.d.ts.map +1 -1
  103. package/dist/src/observability/interactive-pi.js +1 -1
  104. package/dist/src/observability/interactive-pi.js.map +1 -1
  105. package/dist/src/observability/schemas.d.ts +1 -0
  106. package/dist/src/observability/schemas.d.ts.map +1 -1
  107. package/dist/src/observability/schemas.js +1 -0
  108. package/dist/src/observability/schemas.js.map +1 -1
  109. package/dist/src/observability/turn-completion.d.ts +2 -1
  110. package/dist/src/observability/turn-completion.d.ts.map +1 -1
  111. package/dist/src/observability/turn-completion.js +10 -1
  112. package/dist/src/observability/turn-completion.js.map +1 -1
  113. package/dist/src/shared/unix-peercred.d.ts +14 -0
  114. package/dist/src/shared/unix-peercred.d.ts.map +1 -0
  115. package/dist/src/shared/unix-peercred.js +144 -0
  116. package/dist/src/shared/unix-peercred.js.map +1 -0
  117. package/drizzle/0008_pane_tombstones.sql +9 -0
  118. package/drizzle/0009_high_lake.sql +24 -0
  119. package/drizzle/meta/0008_snapshot.json +823 -0
  120. package/drizzle/meta/0009_snapshot.json +975 -0
  121. package/drizzle/meta/_journal.json +14 -0
  122. package/package.json +24 -22
@@ -0,0 +1,144 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { existsSync, readFileSync, readlinkSync, realpathSync, statSync } from "node:fs";
3
+ import { isAbsolute } from "node:path";
4
+ /** Linux `SO_PEERCRED` (include/uapi/asm-generic/socket.h). */
5
+ const SOL_SOCKET = 1;
6
+ const SO_PEERCRED = 17;
7
+ /** Distro python3 only — never search PATH (a fake `python3` earlier on PATH must not win). */
8
+ export const PYTHON3_CANDIDATES = ["/usr/bin/python3", "/bin/python3"];
9
+ let cachedPython3Path;
10
+ export function unixSocketFd(socket) {
11
+ const fd = socket._handle?.fd;
12
+ return typeof fd === "number" && Number.isInteger(fd) && fd >= 0 ? fd : undefined;
13
+ }
14
+ /**
15
+ * Read the connecting process pid from a Linux Unix-domain socket via SO_PEERCRED.
16
+ * Same-UID threat model: this binds a connection to a process, not a user.
17
+ */
18
+ export function linuxPeerPid(socket) {
19
+ if (process.platform !== "linux")
20
+ return undefined;
21
+ const fd = unixSocketFd(socket);
22
+ return fd === undefined ? undefined : linuxPeerPidFromFd(fd);
23
+ }
24
+ export function linuxPeerPidFromFd(fd) {
25
+ if (process.platform !== "linux")
26
+ return undefined;
27
+ const python3 = resolvePython3Path();
28
+ if (!python3) {
29
+ console.error("Herdsman cannot read UDS peer pid: python3 not found at /usr/bin/python3 or /bin/python3");
30
+ return undefined;
31
+ }
32
+ const result = spawnSync(python3, [
33
+ "-c",
34
+ [
35
+ "import socket, struct, sys",
36
+ `s = socket.fromfd(0, socket.AF_UNIX, socket.SOCK_STREAM)`,
37
+ `cred = s.getsockopt(${SOL_SOCKET}, ${SO_PEERCRED}, struct.calcsize("3i"))`,
38
+ "pid, _uid, _gid = struct.unpack('3i', cred)",
39
+ "sys.stdout.write(str(pid))",
40
+ ].join("; "),
41
+ ], {
42
+ encoding: "utf8",
43
+ stdio: [fd, "pipe", "pipe"],
44
+ timeout: 2_000,
45
+ });
46
+ if (result.error || result.status !== 0) {
47
+ console.error("Herdsman python3 SO_PEERCRED helper failed", result.error?.message ?? (result.stderr || `exit ${result.status}`));
48
+ return undefined;
49
+ }
50
+ const pid = Number.parseInt((result.stdout ?? "").trim(), 10);
51
+ return Number.isInteger(pid) && pid > 1 ? pid : undefined;
52
+ }
53
+ export function resolvePython3Path() {
54
+ if (cachedPython3Path)
55
+ return cachedPython3Path;
56
+ for (const candidate of PYTHON3_CANDIDATES) {
57
+ if (!isTrustedPython3(candidate))
58
+ continue;
59
+ cachedPython3Path = candidate;
60
+ return candidate;
61
+ }
62
+ return undefined;
63
+ }
64
+ export function peerBoundToPanePid(peerPid, panePid) {
65
+ if (!Number.isInteger(peerPid) || !Number.isInteger(panePid) || peerPid <= 1 || panePid <= 1) {
66
+ return false;
67
+ }
68
+ if (peerPid === panePid)
69
+ return true;
70
+ return isAncestorPid(panePid, peerPid);
71
+ }
72
+ export function peerBoundToPaneCwd(peerPid, paneCwd) {
73
+ if (!Number.isInteger(peerPid) || peerPid <= 1)
74
+ return false;
75
+ if (typeof paneCwd !== "string" || paneCwd.length === 0)
76
+ return false;
77
+ const peerCwd = processCwd(peerPid);
78
+ if (!peerCwd)
79
+ return false;
80
+ return sameCwd(peerCwd, paneCwd);
81
+ }
82
+ function processCwd(pid) {
83
+ try {
84
+ return readlinkSync(`/proc/${pid}/cwd`);
85
+ }
86
+ catch {
87
+ return undefined;
88
+ }
89
+ }
90
+ function sameCwd(left, right) {
91
+ return normalizeCwd(left) === normalizeCwd(right);
92
+ }
93
+ function normalizeCwd(value) {
94
+ try {
95
+ return realpathSync(value);
96
+ }
97
+ catch {
98
+ return value.length > 1 && value.endsWith("/") ? value.slice(0, -1) : value;
99
+ }
100
+ }
101
+ function isTrustedPython3(path) {
102
+ if (!isAbsolute(path))
103
+ return false;
104
+ try {
105
+ if (!existsSync(path))
106
+ return false;
107
+ const st = statSync(path);
108
+ if (!st.isFile())
109
+ return false;
110
+ const resolved = realpathSync(path);
111
+ return resolved.startsWith("/usr/bin/python") || resolved.startsWith("/bin/python");
112
+ }
113
+ catch {
114
+ return false;
115
+ }
116
+ }
117
+ function isAncestorPid(ancestor, pid) {
118
+ let current = pid;
119
+ for (let step = 0; step < 32; step += 1) {
120
+ const parent = parentPid(current);
121
+ if (parent === undefined || parent <= 1)
122
+ return false;
123
+ if (parent === ancestor)
124
+ return true;
125
+ if (parent === current)
126
+ return false;
127
+ current = parent;
128
+ }
129
+ return false;
130
+ }
131
+ function parentPid(pid) {
132
+ try {
133
+ const status = readFileSync(`/proc/${pid}/status`, "utf8");
134
+ const match = /^PPid:\s*(\d+)\s*$/m.exec(status);
135
+ if (!match)
136
+ return undefined;
137
+ const ppid = Number.parseInt(match[1] ?? "", 10);
138
+ return Number.isInteger(ppid) && ppid >= 0 ? ppid : undefined;
139
+ }
140
+ catch {
141
+ return undefined;
142
+ }
143
+ }
144
+ //# sourceMappingURL=unix-peercred.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unix-peercred.js","sourceRoot":"","sources":["../../../src/shared/unix-peercred.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,+DAA+D;AAC/D,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,+FAA+F;AAC/F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAU,CAAC;AAEhF,IAAI,iBAAqC,CAAC;AAE1C,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAI,MAAwC,CAAC,OAAO,EAAE,EAAE,CAAC;IACjE,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,SAAS,CAAC;IACnD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,0FAA0F,CAC3F,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,SAAS,CACtB,OAAO,EACP;QACE,IAAI;QACJ;YACE,4BAA4B;YAC5B,0DAA0D;YAC1D,uBAAuB,UAAU,KAAK,WAAW,0BAA0B;YAC3E,6CAA6C;YAC7C,4BAA4B;SAC7B,CAAC,IAAI,CAAC,IAAI,CAAC;KACb,EACD;QACE,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC;QAC3B,OAAO,EAAE,KAAK;KACf,CACF,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,KAAK,CACX,4CAA4C,EAC5C,MAAM,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CACpE,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAChD,KAAK,MAAM,SAAS,IAAI,kBAAkB,EAAE,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAAE,SAAS;QAC3C,iBAAiB,GAAG,SAAS,CAAC;QAC9B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAe,EAAE,OAAe;IACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa;IAC1C,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,OAAO,KAAK,CAAC;QAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,GAAW;IAClD,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QACrC,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,GAAG,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ CREATE TABLE `agent_pane_tombstones` (
2
+ `closed_at` integer NOT NULL,
3
+ `herdr_session_name` text NOT NULL,
4
+ `pane_generation` text,
5
+ `pane_id` text NOT NULL,
6
+ FOREIGN KEY (`herdr_session_name`) REFERENCES `herdr_sessions`(`name`) ON UPDATE no action ON DELETE cascade
7
+ );
8
+ --> statement-breakpoint
9
+ CREATE INDEX `agent_pane_tombstones_pane_idx` ON `agent_pane_tombstones` (`herdr_session_name`,`pane_id`);
@@ -0,0 +1,24 @@
1
+ CREATE TABLE `daemon_meta` (
2
+ `key` text PRIMARY KEY NOT NULL,
3
+ `value` text NOT NULL
4
+ );
5
+ --> statement-breakpoint
6
+ CREATE TABLE `status_event_plans` (
7
+ `agent_id` text NOT NULL,
8
+ `attempts` integer DEFAULT 0 NOT NULL,
9
+ `compact_history_json` text,
10
+ `created_at` integer NOT NULL,
11
+ `from_status` text NOT NULL,
12
+ `herdr_event_key` text,
13
+ `herdr_session_name` text NOT NULL,
14
+ `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL,
15
+ `last_error` text,
16
+ `pane_generation` text,
17
+ `pane_id` text NOT NULL,
18
+ `status` text DEFAULT 'pending' NOT NULL,
19
+ `to_status` text NOT NULL,
20
+ `updated_at` integer NOT NULL
21
+ );
22
+ --> statement-breakpoint
23
+ CREATE UNIQUE INDEX `status_event_plans_session_key_idx` ON `status_event_plans` (`herdr_session_name`,`herdr_event_key`) WHERE herdr_event_key IS NOT NULL;--> statement-breakpoint
24
+ CREATE INDEX `status_event_plans_status_id_idx` ON `status_event_plans` (`status`,`id`);