agent-issues 0.0.121 → 0.0.126

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 (166) hide show
  1. package/dist/build-info.json +3 -0
  2. package/dist/cli.js +97746 -26
  3. package/kanban/dist/assets/index-CIAg6qj5.css +1 -0
  4. package/kanban/dist/assets/index-DaYQjJS7.js +920 -0
  5. package/kanban/dist/index.html +13 -0
  6. package/package.json +12 -11
  7. package/site/dist/assets/{index-Cx-fLU3e.js → index-D6NM1iDo.js} +181 -144
  8. package/site/dist/index.html +1 -1
  9. package/dist/agent-installer.d.ts +0 -49
  10. package/dist/agent-installer.js +0 -171
  11. package/dist/agent-installer.js.map +0 -1
  12. package/dist/auth-session.d.ts +0 -40
  13. package/dist/auth-session.js +0 -107
  14. package/dist/auth-session.js.map +0 -1
  15. package/dist/body-backfill.d.ts +0 -26
  16. package/dist/body-backfill.js +0 -219
  17. package/dist/body-backfill.js.map +0 -1
  18. package/dist/build-mode.d.ts +0 -1
  19. package/dist/build-mode.js +0 -1
  20. package/dist/build-mode.js.map +0 -1
  21. package/dist/cli/commands/auth.d.ts +0 -61
  22. package/dist/cli/commands/auth.js +0 -134
  23. package/dist/cli/commands/auth.js.map +0 -1
  24. package/dist/cli/commands/backfill.d.ts +0 -8
  25. package/dist/cli/commands/backfill.js +0 -36
  26. package/dist/cli/commands/backfill.js.map +0 -1
  27. package/dist/cli/commands/comments.d.ts +0 -34
  28. package/dist/cli/commands/comments.js +0 -124
  29. package/dist/cli/commands/comments.js.map +0 -1
  30. package/dist/cli/commands/context.d.ts +0 -13
  31. package/dist/cli/commands/context.js +0 -156
  32. package/dist/cli/commands/context.js.map +0 -1
  33. package/dist/cli/commands/entities.d.ts +0 -91
  34. package/dist/cli/commands/entities.js +0 -420
  35. package/dist/cli/commands/entities.js.map +0 -1
  36. package/dist/cli/commands/export.d.ts +0 -20
  37. package/dist/cli/commands/export.js +0 -98
  38. package/dist/cli/commands/export.js.map +0 -1
  39. package/dist/cli/commands/fallback.d.ts +0 -6
  40. package/dist/cli/commands/fallback.js +0 -10
  41. package/dist/cli/commands/fallback.js.map +0 -1
  42. package/dist/cli/commands/handoff.d.ts +0 -1
  43. package/dist/cli/commands/handoff.js +0 -2
  44. package/dist/cli/commands/handoff.js.map +0 -1
  45. package/dist/cli/commands/installers.d.ts +0 -37
  46. package/dist/cli/commands/installers.js +0 -78
  47. package/dist/cli/commands/installers.js.map +0 -1
  48. package/dist/cli/commands/kanban.d.ts +0 -8
  49. package/dist/cli/commands/kanban.js +0 -83
  50. package/dist/cli/commands/kanban.js.map +0 -1
  51. package/dist/cli/commands/meta.d.ts +0 -14
  52. package/dist/cli/commands/meta.js +0 -33
  53. package/dist/cli/commands/meta.js.map +0 -1
  54. package/dist/cli/commands/plan-entries.d.ts +0 -30
  55. package/dist/cli/commands/plan-entries.js +0 -94
  56. package/dist/cli/commands/plan-entries.js.map +0 -1
  57. package/dist/cli/commands/site.d.ts +0 -29
  58. package/dist/cli/commands/site.js +0 -89
  59. package/dist/cli/commands/site.js.map +0 -1
  60. package/dist/cli/commands/sql.d.ts +0 -6
  61. package/dist/cli/commands/sql.js +0 -21
  62. package/dist/cli/commands/sql.js.map +0 -1
  63. package/dist/cli/commands/synchronize.d.ts +0 -12
  64. package/dist/cli/commands/synchronize.js +0 -31
  65. package/dist/cli/commands/synchronize.js.map +0 -1
  66. package/dist/cli/commands/tenants.d.ts +0 -29
  67. package/dist/cli/commands/tenants.js +0 -101
  68. package/dist/cli/commands/tenants.js.map +0 -1
  69. package/dist/cli/index.d.ts +0 -4
  70. package/dist/cli/index.js +0 -120
  71. package/dist/cli/index.js.map +0 -1
  72. package/dist/cli/renderers.d.ts +0 -250
  73. package/dist/cli/renderers.js +0 -286
  74. package/dist/cli/renderers.js.map +0 -1
  75. package/dist/cli/shared.d.ts +0 -97
  76. package/dist/cli/shared.js +0 -192
  77. package/dist/cli/shared.js.map +0 -1
  78. package/dist/cli.d.ts +0 -11
  79. package/dist/cli.js.map +0 -1
  80. package/dist/context-cli.d.ts +0 -16
  81. package/dist/context-cli.js +0 -131
  82. package/dist/context-cli.js.map +0 -1
  83. package/dist/daemon/daemon-lifecycle.d.ts +0 -1
  84. package/dist/daemon/daemon-lifecycle.js +0 -2
  85. package/dist/daemon/daemon-lifecycle.js.map +0 -1
  86. package/dist/daemon/daemon-main.d.ts +0 -14
  87. package/dist/daemon/daemon-main.js +0 -30
  88. package/dist/daemon/daemon-main.js.map +0 -1
  89. package/dist/daemon/local-daemon-store.d.ts +0 -21
  90. package/dist/daemon/local-daemon-store.js +0 -31
  91. package/dist/daemon/local-daemon-store.js.map +0 -1
  92. package/dist/entity-projection.d.ts +0 -141
  93. package/dist/entity-projection.js +0 -147
  94. package/dist/entity-projection.js.map +0 -1
  95. package/dist/entra-device-login.d.ts +0 -12
  96. package/dist/entra-device-login.js +0 -40
  97. package/dist/entra-device-login.js.map +0 -1
  98. package/dist/export-files.d.ts +0 -24
  99. package/dist/export-files.js +0 -230
  100. package/dist/export-files.js.map +0 -1
  101. package/dist/export-markdown.d.ts +0 -24
  102. package/dist/export-markdown.js +0 -343
  103. package/dist/export-markdown.js.map +0 -1
  104. package/dist/help.d.ts +0 -112
  105. package/dist/help.js +0 -1430
  106. package/dist/help.js.map +0 -1
  107. package/dist/kanban/assets.d.ts +0 -3
  108. package/dist/kanban/assets.js +0 -37
  109. package/dist/kanban/assets.js.map +0 -1
  110. package/dist/kanban/index.d.ts +0 -1
  111. package/dist/kanban/index.js +0 -2
  112. package/dist/kanban/index.js.map +0 -1
  113. package/dist/kanban/server.d.ts +0 -28
  114. package/dist/kanban/server.js +0 -118
  115. package/dist/kanban/server.js.map +0 -1
  116. package/dist/mcp-installer.d.ts +0 -32
  117. package/dist/mcp-installer.js +0 -118
  118. package/dist/mcp-installer.js.map +0 -1
  119. package/dist/mcp-server/index.d.ts +0 -11
  120. package/dist/mcp-server/index.js +0 -504
  121. package/dist/mcp-server/index.js.map +0 -1
  122. package/dist/mcp-server/index.test.d.ts +0 -1
  123. package/dist/mcp-server/index.test.js +0 -746
  124. package/dist/mcp-server/index.test.js.map +0 -1
  125. package/dist/mcp-server/mcp-tool-audit.d.ts +0 -6
  126. package/dist/mcp-server/mcp-tool-audit.js +0 -47
  127. package/dist/mcp-server/mcp-tool-audit.js.map +0 -1
  128. package/dist/mcp-server/stdio.d.ts +0 -2
  129. package/dist/mcp-server/stdio.js +0 -7
  130. package/dist/mcp-server/stdio.js.map +0 -1
  131. package/dist/mcp.d.ts +0 -2
  132. package/dist/mcp.js +0 -19
  133. package/dist/mcp.js.map +0 -1
  134. package/dist/open-storage-driver.d.ts +0 -55
  135. package/dist/open-storage-driver.js +0 -73
  136. package/dist/open-storage-driver.js.map +0 -1
  137. package/dist/open-synchronize-stores.d.ts +0 -24
  138. package/dist/open-synchronize-stores.js +0 -34
  139. package/dist/open-synchronize-stores.js.map +0 -1
  140. package/dist/project-identity.d.ts +0 -23
  141. package/dist/project-identity.js +0 -121
  142. package/dist/project-identity.js.map +0 -1
  143. package/dist/runtime-access-boundary.d.ts +0 -7
  144. package/dist/runtime-access-boundary.js +0 -182
  145. package/dist/runtime-access-boundary.js.map +0 -1
  146. package/dist/service-discovery.d.ts +0 -10
  147. package/dist/service-discovery.js +0 -64
  148. package/dist/service-discovery.js.map +0 -1
  149. package/dist/site/assets.d.ts +0 -4
  150. package/dist/site/assets.js +0 -46
  151. package/dist/site/assets.js.map +0 -1
  152. package/dist/site/cloud-events-relay.d.ts +0 -16
  153. package/dist/site/cloud-events-relay.js +0 -78
  154. package/dist/site/cloud-events-relay.js.map +0 -1
  155. package/dist/site/index.d.ts +0 -1
  156. package/dist/site/index.js +0 -2
  157. package/dist/site/index.js.map +0 -1
  158. package/dist/site/server.d.ts +0 -42
  159. package/dist/site/server.js +0 -632
  160. package/dist/site/server.js.map +0 -1
  161. package/dist/skill-installer.d.ts +0 -35
  162. package/dist/skill-installer.js +0 -180
  163. package/dist/skill-installer.js.map +0 -1
  164. package/dist/vitest-setup.d.ts +0 -1
  165. package/dist/vitest-setup.js +0 -7
  166. package/dist/vitest-setup.js.map +0 -1
@@ -1,182 +0,0 @@
1
- import { readdirSync, readFileSync } from "node:fs";
2
- import path from "node:path";
3
- import { parse } from "@babel/parser";
4
- const allowedMethodInfrastructure = new Set([
5
- "api-pg/src/db/connection.ts",
6
- "api-pg/src/db/migration-runner.ts",
7
- "api-pg/src/db/source-profile.ts",
8
- "api-pg/src/db/tenant-admin.ts",
9
- "api-pg/src/db/test-tenant-cleanup.ts"
10
- ]);
11
- const SQLITE_ADAPTER_MODULE = "api-local/src/db/sqlite-connection.ts";
12
- const SQLITE_RAW_METHODS = new Set(["prepare", "exec", "transaction", "pragma", "all", "get", "run"]);
13
- const SQLITE_ESCAPE_HATCH_PROPERTIES = new Set(["db", "identityToken"]);
14
- const SQLITE_DRIVER_OBJECT_NAMES = new Set(["db", "database", "connection", "executor", "sqlite"]);
15
- function isAllowedMethodInfrastructure(file) {
16
- return allowedMethodInfrastructure.has(file) || file.startsWith("api-local/src/migrations/") || file.startsWith("api-pg/src/migrations/");
17
- }
18
- function visitAst(value, visit) {
19
- if (Array.isArray(value)) {
20
- for (const item of value) {
21
- visitAst(item, visit);
22
- }
23
- return;
24
- }
25
- if (!value || typeof value !== "object") {
26
- return;
27
- }
28
- const node = value;
29
- if (typeof node.type === "string") {
30
- visit(node);
31
- }
32
- for (const [key, child] of Object.entries(node)) {
33
- if (key !== "loc" && key !== "start" && key !== "end") {
34
- visitAst(child, visit);
35
- }
36
- }
37
- }
38
- function listTypeScriptFiles(root) {
39
- const files = [];
40
- for (const entry of readdirSync(root, { withFileTypes: true })) {
41
- const entryPath = path.join(root, entry.name);
42
- if (entry.isDirectory()) {
43
- files.push(...listTypeScriptFiles(entryPath));
44
- }
45
- else if (entry.name.endsWith(".ts") && !entry.name.endsWith(".test.ts")) {
46
- files.push(entryPath);
47
- }
48
- }
49
- return files;
50
- }
51
- export function findRuntimeAccessBoundaryViolations(root) {
52
- const violations = [];
53
- for (const filePath of listTypeScriptFiles(root)) {
54
- const relativeFile = path.relative(root, filePath).split(path.sep).join("/").replace(/^packages\//, "");
55
- if (!relativeFile.startsWith("api-pg/src/") && !relativeFile.startsWith("api-local/src/")) {
56
- continue;
57
- }
58
- const driver = relativeFile.startsWith("api-pg/") ? "pg" : "better-sqlite3";
59
- if (driver === "pg" && isAllowedMethodInfrastructure(relativeFile)) {
60
- continue;
61
- }
62
- let ast;
63
- try {
64
- ast = parse(readFileSync(filePath, "utf8"), { sourceType: "module", plugins: ["typescript"] });
65
- }
66
- catch {
67
- continue;
68
- }
69
- const sqliteImportNames = new Set();
70
- const sourceProgram = ast.program;
71
- for (const statement of sourceProgram.body ?? []) {
72
- const node = statement;
73
- if (node.type !== "ImportDeclaration") {
74
- continue;
75
- }
76
- const source = node.source;
77
- if (source?.type !== "StringLiteral" || source.value !== "better-sqlite3") {
78
- continue;
79
- }
80
- const loc = node.loc;
81
- const specifiers = node.specifiers ?? [];
82
- for (const specifier of specifiers) {
83
- const local = specifier.local;
84
- if (local?.type === "Identifier" && typeof local.name === "string") {
85
- sqliteImportNames.add(local.name);
86
- }
87
- }
88
- if (relativeFile !== SQLITE_ADAPTER_MODULE) {
89
- violations.push({
90
- file: relativeFile,
91
- line: loc?.start?.line ?? 1,
92
- driver: "better-sqlite3",
93
- method: "import"
94
- });
95
- }
96
- }
97
- const checkMethodCalls = !isAllowedMethodInfrastructure(relativeFile);
98
- const checkSqliteNativeAccess = driver === "better-sqlite3";
99
- visitAst(ast, (node) => {
100
- if (node.type === "MemberExpression" && !node.computed) {
101
- const property = node.property;
102
- const loc = node.loc;
103
- if (relativeFile !== SQLITE_ADAPTER_MODULE
104
- && property?.type === "Identifier"
105
- && property.name === "$client") {
106
- violations.push({
107
- file: relativeFile,
108
- line: loc?.start?.line ?? 1,
109
- driver: "better-sqlite3",
110
- method: "$client"
111
- });
112
- }
113
- }
114
- if (checkSqliteNativeAccess && node.type === "NewExpression") {
115
- const callee = node.callee;
116
- const loc = node.loc;
117
- if (callee?.type === "Identifier" && typeof callee.name === "string" && sqliteImportNames.has(callee.name)) {
118
- if (relativeFile !== SQLITE_ADAPTER_MODULE) {
119
- violations.push({
120
- file: relativeFile,
121
- line: loc?.start?.line ?? 1,
122
- driver: "better-sqlite3",
123
- method: "construct"
124
- });
125
- }
126
- }
127
- }
128
- if (checkSqliteNativeAccess && node.type === "MemberExpression" && !node.computed) {
129
- const object = node.object;
130
- const property = node.property;
131
- const loc = node.loc;
132
- const objectIdentifier = object?.type === "Identifier" && typeof object.name === "string" ? object.name : undefined;
133
- if (objectIdentifier !== undefined
134
- && SQLITE_DRIVER_OBJECT_NAMES.has(objectIdentifier)
135
- && property?.type === "Identifier"
136
- && typeof property.name === "string"
137
- && SQLITE_ESCAPE_HATCH_PROPERTIES.has(property.name)) {
138
- violations.push({
139
- file: relativeFile,
140
- line: loc?.start?.line ?? 1,
141
- driver: "better-sqlite3",
142
- method: property.name
143
- });
144
- }
145
- }
146
- if (!checkMethodCalls) {
147
- return;
148
- }
149
- const callee = node.callee;
150
- const property = callee?.property;
151
- const object = callee?.object;
152
- const method = node.type === "CallExpression" && callee?.type === "MemberExpression" && !callee.computed && property?.type === "Identifier"
153
- ? property.name
154
- : undefined;
155
- const objectIdentifier = object?.type === "Identifier" && typeof object.name === "string" ? object.name : undefined;
156
- const isThisDbCall = object?.type === "MemberExpression"
157
- && object.object && object.object.type === "ThisExpression"
158
- && object.property?.type === "Identifier"
159
- && object.property.name === "db";
160
- const isDrizzleCall = object?.type === "MemberExpression"
161
- && object.property?.type === "Identifier"
162
- && object.property.name === "drizzle";
163
- const isLikelySqliteDriverCall = (objectIdentifier !== undefined && SQLITE_DRIVER_OBJECT_NAMES.has(objectIdentifier)) || isThisDbCall;
164
- if ((driver === "pg" && method === "query") ||
165
- (driver === "better-sqlite3"
166
- && typeof method === "string"
167
- && SQLITE_RAW_METHODS.has(method)
168
- && isLikelySqliteDriverCall
169
- && !isDrizzleCall)) {
170
- const loc = node.loc;
171
- violations.push({
172
- file: relativeFile,
173
- line: loc?.start?.line ?? 1,
174
- driver,
175
- method: method
176
- });
177
- }
178
- });
179
- }
180
- return violations;
181
- }
182
- //# sourceMappingURL=runtime-access-boundary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runtime-access-boundary.js","sourceRoot":"","sources":["../src/runtime-access-boundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAsBtC,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC3C,6BAA6B;IAC7B,mCAAmC;IACnC,iCAAiC;IACjC,+BAA+B;IAC/B,sCAAsC;CACtC,CAAC,CAAC;AACH,MAAM,qBAAqB,GAAG,uCAAuC,CAAC;AACtE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACtG,MAAM,8BAA8B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC;AACxE,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEnG,SAAS,6BAA6B,CAAC,IAAY;IAClD,OAAO,2BAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;AAC3I,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,KAA8C;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO;IACR,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACzC,OAAO;IACR,CAAC;IAED,MAAM,IAAI,GAAG,KAAgC,CAAC;IAC9C,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACvD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;AACF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3E,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mCAAmC,CAAC,IAAY;IAC/D,MAAM,UAAU,GAAqC,EAAE,CAAC;IAExD,KAAK,MAAM,QAAQ,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC3F,SAAS;QACV,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAC5E,IAAI,MAAM,KAAK,IAAI,IAAI,6BAA6B,CAAC,YAAY,CAAC,EAAE,CAAC;YACpE,SAAS;QACV,CAAC;QAED,IAAI,GAA6B,CAAC;QAClC,IAAI,CAAC;YACJ,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QAAC,MAAM,CAAC;YACR,SAAS;QACV,CAAC;QACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC5C,MAAM,aAAa,GAAG,GAAG,CAAC,OAA+B,CAAC;QAE1D,KAAK,MAAM,SAAS,IAAI,aAAa,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,SAAoC,CAAC;YAClD,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;gBACvC,SAAS;YACV,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6C,CAAC;YAClE,IAAI,MAAM,EAAE,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,KAAK,KAAK,gBAAgB,EAAE,CAAC;gBAC3E,SAAS;YACV,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgD,CAAC;YAClE,MAAM,UAAU,GAAI,IAAI,CAAC,UAAyD,IAAI,EAAE,CAAC;YACzF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,SAAS,CAAC,KAA4C,CAAC;gBACrE,IAAI,KAAK,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACpE,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnC,CAAC;YACF,CAAC;YACD,IAAI,YAAY,KAAK,qBAAqB,EAAE,CAAC;gBAC5C,UAAU,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;oBAC3B,MAAM,EAAE,gBAAgB;oBACxB,MAAM,EAAE,QAAQ;iBAChB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,MAAM,gBAAgB,GAAG,CAAC,6BAA6B,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,uBAAuB,GAAG,MAAM,KAAK,gBAAgB,CAAC;QAE5D,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACtB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;gBACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgD,CAAC;gBAClE,IACC,YAAY,KAAK,qBAAqB;uBACnC,QAAQ,EAAE,IAAI,KAAK,YAAY;uBAC/B,QAAQ,CAAC,IAAI,KAAK,SAAS,EAC7B,CAAC;oBACF,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;wBAC3B,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,SAAS;qBACjB,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,IAAI,uBAAuB,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6C,CAAC;gBAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgD,CAAC;gBAClE,IAAI,MAAM,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5G,IAAI,YAAY,KAAK,qBAAqB,EAAE,CAAC;wBAC5C,UAAU,CAAC,IAAI,CAAC;4BACf,IAAI,EAAE,YAAY;4BAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;4BAC3B,MAAM,EAAE,gBAAgB;4BACxB,MAAM,EAAE,WAAW;yBACnB,CAAC,CAAC;oBACJ,CAAC;gBACF,CAAC;YACF,CAAC;YAED,IAAI,uBAAuB,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnF,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6C,CAAC;gBAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA+C,CAAC;gBACtE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgD,CAAC;gBAClE,MAAM,gBAAgB,GAAG,MAAM,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpH,IACC,gBAAgB,KAAK,SAAS;uBAC3B,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC;uBAChD,QAAQ,EAAE,IAAI,KAAK,YAAY;uBAC/B,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;uBACjC,8BAA8B,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EACnD,CAAC;oBACF,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,YAAY;wBAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;wBAC3B,MAAM,EAAE,gBAAgB;wBACxB,MAAM,EAAE,QAAQ,CAAC,IAAgD;qBACjE,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACvB,OAAO;YACR,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAA6C,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,EAAE,QAA+C,CAAC;YACzE,MAAM,MAAM,GAAG,MAAM,EAAE,MAA6C,CAAC;YACrE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,EAAE,IAAI,KAAK,kBAAkB,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ,EAAE,IAAI,KAAK,YAAY;gBAC1I,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACf,CAAC,CAAC,SAAS,CAAC;YACb,MAAM,gBAAgB,GAAG,MAAM,EAAE,IAAI,KAAK,YAAY,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YACpH,MAAM,YAAY,GAAG,MAAM,EAAE,IAAI,KAAK,kBAAkB;mBACpD,MAAM,CAAC,MAAM,IAAK,MAAM,CAAC,MAAkC,CAAC,IAAI,KAAK,gBAAgB;mBACpF,MAAM,CAAC,QAAoC,EAAE,IAAI,KAAK,YAAY;mBAClE,MAAM,CAAC,QAAoC,CAAC,IAAI,KAAK,IAAI,CAAC;YAC/D,MAAM,aAAa,GAAG,MAAM,EAAE,IAAI,KAAK,kBAAkB;mBACpD,MAAM,CAAC,QAAoC,EAAE,IAAI,KAAK,YAAY;mBAClE,MAAM,CAAC,QAAoC,CAAC,IAAI,KAAK,SAAS,CAAC;YACpE,MAAM,wBAAwB,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,0BAA0B,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,YAAY,CAAC;YACtI,IACC,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC;gBACvC,CAAC,MAAM,KAAK,gBAAgB;uBACxB,OAAO,MAAM,KAAK,QAAQ;uBAC1B,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;uBAC9B,wBAAwB;uBACxB,CAAC,aAAa,CAAC,EAClB,CAAC;gBACF,MAAM,GAAG,GAAG,IAAI,CAAC,GAAgD,CAAC;gBAClE,UAAU,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC;oBAC3B,MAAM;oBACN,MAAM,EAAE,MAAkD;iBAC1D,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC"}
@@ -1,10 +0,0 @@
1
- export type EntraServiceAuth = {
2
- provider: "entra";
3
- tenantId: string;
4
- clientId: string;
5
- };
6
- export type DiscoveredServiceAuth = {
7
- serviceUrl: string;
8
- auth: EntraServiceAuth;
9
- };
10
- export declare function discoverServiceAuth(serviceUrl: string, fetch?: typeof globalThis.fetch): Promise<DiscoveredServiceAuth>;
@@ -1,64 +0,0 @@
1
- export async function discoverServiceAuth(serviceUrl, fetch = globalThis.fetch) {
2
- const normalizedUrl = new URL(serviceUrl.trim());
3
- if (normalizedUrl.protocol !== "http:" && normalizedUrl.protocol !== "https:") {
4
- throw new Error(`Unsupported service URL protocol: ${normalizedUrl.protocol}`);
5
- }
6
- if (normalizedUrl.username || normalizedUrl.password) {
7
- throw new Error("Service URL must not contain embedded credentials.");
8
- }
9
- normalizedUrl.pathname = normalizedUrl.pathname.replace(/\/+$/, "");
10
- normalizedUrl.search = "";
11
- normalizedUrl.hash = "";
12
- const normalizedServiceUrl = normalizedUrl.toString().replace(/\/$/, "");
13
- const discoveryUrl = `${normalizedServiceUrl}/.well-known/agent-issues`;
14
- let response;
15
- try {
16
- response = await fetch(discoveryUrl, { headers: { accept: "application/json" } });
17
- }
18
- catch (error) {
19
- const message = error instanceof Error ? error.message : String(error);
20
- throw new Error(`Could not reach ${discoveryUrl}: ${message}`, { cause: error });
21
- }
22
- if (!response.ok) {
23
- throw new Error(`Service discovery failed with HTTP ${response.status} at ${discoveryUrl}.`);
24
- }
25
- let body;
26
- try {
27
- body = await response.json();
28
- }
29
- catch (error) {
30
- throw new Error("Service returned malformed agent-issues auth metadata.", { cause: error });
31
- }
32
- const provider = readAuthProvider(body);
33
- if (provider !== undefined && provider !== "entra") {
34
- throw new Error(`Unsupported service authentication provider: "${provider}".`);
35
- }
36
- if (!isEntraMetadata(body)) {
37
- throw new Error("Service returned malformed agent-issues auth metadata.");
38
- }
39
- return { serviceUrl: normalizedServiceUrl, auth: body.auth };
40
- }
41
- function readAuthProvider(value) {
42
- if (typeof value !== "object" || value === null || !("auth" in value))
43
- return undefined;
44
- const auth = value.auth;
45
- if (typeof auth !== "object" || auth === null || !("provider" in auth))
46
- return undefined;
47
- return auth.provider;
48
- }
49
- function isEntraMetadata(value) {
50
- if (typeof value !== "object" || value === null || !("auth" in value))
51
- return false;
52
- const auth = value.auth;
53
- return (typeof auth === "object" &&
54
- auth !== null &&
55
- "provider" in auth &&
56
- auth.provider === "entra" &&
57
- "tenantId" in auth &&
58
- typeof auth.tenantId === "string" &&
59
- auth.tenantId.length > 0 &&
60
- "clientId" in auth &&
61
- typeof auth.clientId === "string" &&
62
- auth.clientId.length > 0);
63
- }
64
- //# sourceMappingURL=service-discovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-discovery.js","sourceRoot":"","sources":["../src/service-discovery.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare function ensureBuiltSite(): string;
2
- export declare function copyBuiltSite(outputDir: string): void;
3
- export declare function getBuiltSiteAssetPath(requestPath: string): string | null;
4
- export declare function getContentType(filePath: string): string;
@@ -1,46 +0,0 @@
1
- import { cpSync, existsSync } from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- const siteDistDir = fileURLToPath(new URL("../../site/dist/", import.meta.url));
5
- export function ensureBuiltSite() {
6
- const entrypoint = path.join(siteDistDir, "index.html");
7
- if (!existsSync(entrypoint)) {
8
- throw new Error("Site assets are not built. Run `pnpm run build` before serving or exporting the site.");
9
- }
10
- return siteDistDir;
11
- }
12
- export function copyBuiltSite(outputDir) {
13
- cpSync(ensureBuiltSite(), outputDir, { force: true, recursive: true });
14
- }
15
- export function getBuiltSiteAssetPath(requestPath) {
16
- const normalized = requestPath === "/" ? "/index.html" : requestPath;
17
- const cleaned = normalized.replace(/^\/+/, "");
18
- const root = ensureBuiltSite();
19
- const candidate = path.resolve(root, cleaned);
20
- if (!candidate.startsWith(root)) {
21
- return null;
22
- }
23
- return existsSync(candidate) ? candidate : null;
24
- }
25
- export function getContentType(filePath) {
26
- if (filePath.endsWith(".html")) {
27
- return "text/html; charset=utf-8";
28
- }
29
- if (filePath.endsWith(".js")) {
30
- return "text/javascript; charset=utf-8";
31
- }
32
- if (filePath.endsWith(".css")) {
33
- return "text/css; charset=utf-8";
34
- }
35
- if (filePath.endsWith(".json")) {
36
- return "application/json; charset=utf-8";
37
- }
38
- if (filePath.endsWith(".svg")) {
39
- return "image/svg+xml";
40
- }
41
- if (filePath.endsWith(".ico")) {
42
- return "image/x-icon";
43
- }
44
- return "application/octet-stream";
45
- }
46
- //# sourceMappingURL=assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../src/site/assets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEhF,MAAM,UAAU,eAAe;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC9C,MAAM,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACxD,MAAM,UAAU,GAAG,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;IACrE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC9C,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,0BAA0B,CAAC;IACnC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,gCAAgC,CAAC;IACzC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,yBAAyB,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,iCAAiC,CAAC;IAC1C,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC;IACvB,CAAC;IAED,OAAO,0BAA0B,CAAC;AACnC,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { ProjectChangeEvent } from "@agent-issues/core";
2
- export type CloudEventsConnection = {
3
- baseUrl: string;
4
- bearerToken: string;
5
- };
6
- export type CloudChangeEvent = ProjectChangeEvent;
7
- /**
8
- * Relays the cloud API's own `/events` SSE channel (ISS48) into a callback,
9
- * so the site server's `/events` route can re-broadcast `snapshot-changed`
10
- * events to its own browser clients using the identical event shape - the
11
- * cloud-mode counterpart to the local file-watch poll (ISS56). Only
12
- * `snapshot-changed` events reach the callback; the gate's own per-connection
13
- * `connected` event is swallowed here since the browser side already gets
14
- * its own `connected` event from the site server.
15
- */
16
- export declare function subscribeToCloudEvents(connection: CloudEventsConnection, onEvent: (event: CloudChangeEvent) => void): () => void;
@@ -1,78 +0,0 @@
1
- const RECONNECT_DELAY_MS = 1000;
2
- /**
3
- * Relays the cloud API's own `/events` SSE channel (ISS48) into a callback,
4
- * so the site server's `/events` route can re-broadcast `snapshot-changed`
5
- * events to its own browser clients using the identical event shape - the
6
- * cloud-mode counterpart to the local file-watch poll (ISS56). Only
7
- * `snapshot-changed` events reach the callback; the gate's own per-connection
8
- * `connected` event is swallowed here since the browser side already gets
9
- * its own `connected` event from the site server.
10
- */
11
- export function subscribeToCloudEvents(connection, onEvent) {
12
- const controller = new AbortController();
13
- void relay(connection, controller.signal, onEvent);
14
- return () => controller.abort();
15
- }
16
- async function relay(connection, signal, onEvent) {
17
- while (!signal.aborted) {
18
- try {
19
- const response = await fetch(`${connection.baseUrl}/events`, {
20
- headers: { authorization: `Bearer ${connection.bearerToken}` },
21
- signal
22
- });
23
- if (response.ok && response.body) {
24
- await readEventStream(response.body, onEvent);
25
- }
26
- }
27
- catch {
28
- // Connection dropped or was aborted; fall through to the reconnect delay
29
- // (or exit the loop if aborted).
30
- }
31
- if (!signal.aborted) {
32
- await delay(RECONNECT_DELAY_MS, signal);
33
- }
34
- }
35
- }
36
- async function readEventStream(body, onEvent) {
37
- const decoder = new TextDecoder();
38
- let buffer = "";
39
- for await (const chunk of body) {
40
- buffer += decoder.decode(chunk, { stream: true });
41
- let boundary = buffer.indexOf("\n\n");
42
- while (boundary !== -1) {
43
- const rawEvent = buffer.slice(0, boundary);
44
- buffer = buffer.slice(boundary + 2);
45
- emitParsedEvent(rawEvent, onEvent);
46
- boundary = buffer.indexOf("\n\n");
47
- }
48
- }
49
- }
50
- function emitParsedEvent(rawEvent, onEvent) {
51
- const dataLine = rawEvent.split("\n").find((line) => line.startsWith("data:"));
52
- if (!dataLine) {
53
- return;
54
- }
55
- try {
56
- const parsed = JSON.parse(dataLine.slice("data:".length).trim());
57
- if (parsed.type === "snapshot-changed") {
58
- onEvent(parsed);
59
- }
60
- }
61
- catch {
62
- // Malformed event payload; ignore rather than crash the relay.
63
- }
64
- }
65
- function delay(ms, signal) {
66
- return new Promise((resolve) => {
67
- if (signal.aborted) {
68
- resolve();
69
- return;
70
- }
71
- const timeout = setTimeout(resolve, ms);
72
- signal.addEventListener("abort", () => {
73
- clearTimeout(timeout);
74
- resolve();
75
- }, { once: true });
76
- });
77
- }
78
- //# sourceMappingURL=cloud-events-relay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cloud-events-relay.js","sourceRoot":"","sources":["../../src/site/cloud-events-relay.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export { startLiveSite, stopLiveSite, type LiveSiteHandle, type LiveSiteInfo, type StopLiveSiteResult } from "./server.js";
@@ -1,2 +0,0 @@
1
- export { startLiveSite, stopLiveSite } from "./server.js";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/site/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAmE,MAAM,aAAa,CAAC"}
@@ -1,42 +0,0 @@
1
- import { type Server } from "node:http";
2
- import type { SavedLoginStoreOptions } from "../auth-session.js";
3
- export type LiveSiteInfo = {
4
- dbPath: string;
5
- host: string;
6
- port: number;
7
- url: string;
8
- defaultTenant: string;
9
- };
10
- export type LiveSiteHandle = {
11
- info: LiveSiteInfo;
12
- server: Server;
13
- close: () => void;
14
- };
15
- export type StopLiveSiteResult = {
16
- host: string;
17
- port: number;
18
- url: string;
19
- reachable: boolean;
20
- stopped: boolean;
21
- };
22
- export declare function startLiveSite(input: {
23
- dbPath?: string;
24
- host?: string;
25
- port?: number;
26
- tenant?: string;
27
- currentWorkingDirectory?: string;
28
- /** Overrides the local-mode snapshot-signature poll interval; defaults to 1000ms. Test-only knob. */
29
- pollIntervalMs?: number;
30
- /**
31
- * Overrides how `auth-session.ts` reaches the native OS credential store
32
- * (ISS185, ADR46) for the remote saved-login lookup. Production
33
- * never sets this - the real OS tool is used. Tests inject an
34
- * in-memory fake so a remote-routed site server never shells out to the
35
- * real credential store.
36
- */
37
- credentialStoreOptions?: SavedLoginStoreOptions;
38
- }): Promise<LiveSiteHandle>;
39
- export declare function stopLiveSite(input: {
40
- host?: string;
41
- port?: number;
42
- }): Promise<StopLiveSiteResult>;