@tacuchi/agent-workflow-cli 22.4.2 → 24.0.0

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 (295) hide show
  1. package/README.md +39 -3
  2. package/dist/adapters/git-cli.js +59 -17
  3. package/dist/adapters/git-cli.js.map +1 -1
  4. package/dist/adapters/node-file-system.js +55 -1
  5. package/dist/adapters/node-file-system.js.map +1 -1
  6. package/dist/adapters/postgres-readonly-tools.js +277 -0
  7. package/dist/adapters/postgres-readonly-tools.js.map +1 -0
  8. package/dist/application/artifacts-service.js +2 -2
  9. package/dist/application/artifacts-service.js.map +1 -1
  10. package/dist/application/capability/dispatcher.js +2 -2
  11. package/dist/application/capability/dispatcher.js.map +1 -1
  12. package/dist/application/capability/installed-inventory.js +2 -2
  13. package/dist/application/capability/installed-inventory.js.map +1 -1
  14. package/dist/application/capability/readiness.js +1 -1
  15. package/dist/application/capability/readiness.js.map +1 -1
  16. package/dist/application/check-branch-service.js +2 -2
  17. package/dist/application/check-branch-service.js.map +1 -1
  18. package/dist/application/checkpoint/files-touched.js +271 -0
  19. package/dist/application/checkpoint/files-touched.js.map +1 -0
  20. package/dist/application/checkpoint/markdown.js +61 -8
  21. package/dist/application/checkpoint/markdown.js.map +1 -1
  22. package/dist/application/checkpoint/state-reader.js +8 -2
  23. package/dist/application/checkpoint/state-reader.js.map +1 -1
  24. package/dist/application/checkpoint-write-service.js +16 -5
  25. package/dist/application/checkpoint-write-service.js.map +1 -1
  26. package/dist/application/claims-ledger.js +330 -0
  27. package/dist/application/claims-ledger.js.map +1 -0
  28. package/dist/application/claims-recovery.js +338 -0
  29. package/dist/application/claims-recovery.js.map +1 -0
  30. package/dist/application/database-mcp-server.js +168 -0
  31. package/dist/application/database-mcp-server.js.map +1 -0
  32. package/dist/application/database-mcp-stdio.js +137 -0
  33. package/dist/application/database-mcp-stdio.js.map +1 -0
  34. package/dist/application/database-tool-catalog.js +226 -0
  35. package/dist/application/database-tool-catalog.js.map +1 -0
  36. package/dist/application/dev-only-services.js +154 -44
  37. package/dist/application/dev-only-services.js.map +1 -1
  38. package/dist/application/dsn-reader-service.js +1 -1
  39. package/dist/application/elicitation-server.js +382 -0
  40. package/dist/application/elicitation-server.js.map +1 -0
  41. package/dist/application/elicitation-stdio.js +48 -0
  42. package/dist/application/elicitation-stdio.js.map +1 -0
  43. package/dist/application/flow/advance.js +86 -5
  44. package/dist/application/flow/advance.js.map +1 -1
  45. package/dist/application/flow/checkout-observation.js +152 -0
  46. package/dist/application/flow/checkout-observation.js.map +1 -0
  47. package/dist/application/flow/flow-service.js +72 -13
  48. package/dist/application/flow/flow-service.js.map +1 -1
  49. package/dist/application/flow/internal-actions.js +460 -1
  50. package/dist/application/flow/internal-actions.js.map +1 -1
  51. package/dist/application/flow/internal-drive.js +22 -9
  52. package/dist/application/flow/internal-drive.js.map +1 -1
  53. package/dist/application/flow/prove.js +205 -0
  54. package/dist/application/flow/prove.js.map +1 -0
  55. package/dist/application/flow/run-journey.js +15 -0
  56. package/dist/application/flow/run-journey.js.map +1 -0
  57. package/dist/application/flow/run-projection.js +15 -3
  58. package/dist/application/flow/run-projection.js.map +1 -1
  59. package/dist/application/flow/run-state-service.js +19 -4
  60. package/dist/application/flow/run-state-service.js.map +1 -1
  61. package/dist/application/flow/submit.js +250 -72
  62. package/dist/application/flow/submit.js.map +1 -1
  63. package/dist/application/generate-launch-service.js +4 -4
  64. package/dist/application/generate-launch-service.js.map +1 -1
  65. package/dist/application/git-flow-service.js +9 -0
  66. package/dist/application/git-flow-service.js.map +1 -1
  67. package/dist/application/local-proposal.js +9 -0
  68. package/dist/application/local-proposal.js.map +1 -1
  69. package/dist/application/lock-service.js +96 -28
  70. package/dist/application/lock-service.js.map +1 -1
  71. package/dist/application/logging/log-events.js +19 -3
  72. package/dist/application/logging/log-events.js.map +1 -1
  73. package/dist/application/logging/logger.js +2 -2
  74. package/dist/application/logging/logger.js.map +1 -1
  75. package/dist/application/mcp-connections-service.js +115 -41
  76. package/dist/application/mcp-connections-service.js.map +1 -1
  77. package/dist/application/mcp-doctor-service.js +98 -54
  78. package/dist/application/mcp-doctor-service.js.map +1 -1
  79. package/dist/application/mcp-entry-classification.js +60 -0
  80. package/dist/application/mcp-entry-classification.js.map +1 -0
  81. package/dist/application/mcp-host-reader.js +114 -81
  82. package/dist/application/mcp-host-reader.js.map +1 -1
  83. package/dist/application/mcp-host-receipt-service.js +399 -0
  84. package/dist/application/mcp-host-receipt-service.js.map +1 -0
  85. package/dist/application/mcp-host-receipt-store.js +122 -0
  86. package/dist/application/mcp-host-receipt-store.js.map +1 -0
  87. package/dist/application/mcp-host-receipts.js +28 -0
  88. package/dist/application/mcp-host-receipts.js.map +1 -0
  89. package/dist/application/mcp-host-writer.js +321 -126
  90. package/dist/application/mcp-host-writer.js.map +1 -1
  91. package/dist/application/mcp-launch-probe-service.js +142 -0
  92. package/dist/application/mcp-launch-probe-service.js.map +1 -0
  93. package/dist/application/mcp-migration-service.js +351 -0
  94. package/dist/application/mcp-migration-service.js.map +1 -0
  95. package/dist/application/mcp-native-host-check-service.js +154 -0
  96. package/dist/application/mcp-native-host-check-service.js.map +1 -0
  97. package/dist/application/mcp-receipt-registration-service.js +105 -0
  98. package/dist/application/mcp-receipt-registration-service.js.map +1 -0
  99. package/dist/application/mcp-receipt-removal-service.js +62 -0
  100. package/dist/application/mcp-receipt-removal-service.js.map +1 -0
  101. package/dist/application/mcp-remove-service.js +84 -21
  102. package/dist/application/mcp-remove-service.js.map +1 -1
  103. package/dist/application/mcp-scope-common.js +2 -4
  104. package/dist/application/mcp-scope-common.js.map +1 -1
  105. package/dist/application/mcp-setup-service.js +60 -21
  106. package/dist/application/mcp-setup-service.js.map +1 -1
  107. package/dist/application/mcp-stdio-probe.js +526 -0
  108. package/dist/application/mcp-stdio-probe.js.map +1 -0
  109. package/dist/application/mcp-test-connection-service.js +23 -50
  110. package/dist/application/mcp-test-connection-service.js.map +1 -1
  111. package/dist/application/merge-state-service.js +10 -16
  112. package/dist/application/merge-state-service.js.map +1 -1
  113. package/dist/application/multiroot/claude.js +34 -15
  114. package/dist/application/multiroot/claude.js.map +1 -1
  115. package/dist/application/multiroot/codex.js +9 -5
  116. package/dist/application/multiroot/codex.js.map +1 -1
  117. package/dist/application/multiroot-service.js +20 -11
  118. package/dist/application/multiroot-service.js.map +1 -1
  119. package/dist/application/parsers/project-block.js +25 -2
  120. package/dist/application/parsers/project-block.js.map +1 -1
  121. package/dist/application/paths-service.js +30 -31
  122. package/dist/application/paths-service.js.map +1 -1
  123. package/dist/application/plan-exec-batch-service.js +549 -0
  124. package/dist/application/plan-exec-batch-service.js.map +1 -0
  125. package/dist/application/plan-exec-decision-service.js +273 -0
  126. package/dist/application/plan-exec-decision-service.js.map +1 -0
  127. package/dist/application/project-md-service.js +2 -2
  128. package/dist/application/project-md-service.js.map +1 -1
  129. package/dist/application/project-md-upsert-service.js +4 -4
  130. package/dist/application/project-md-upsert-service.js.map +1 -1
  131. package/dist/application/project-tab-data.js +12 -7
  132. package/dist/application/project-tab-data.js.map +1 -1
  133. package/dist/application/release-data-service.js +2 -2
  134. package/dist/application/release-data-service.js.map +1 -1
  135. package/dist/application/resume-service.js +32 -11
  136. package/dist/application/resume-service.js.map +1 -1
  137. package/dist/application/retirement/apply.js +84 -0
  138. package/dist/application/retirement/apply.js.map +1 -1
  139. package/dist/application/retirement/attribution.js +31 -1
  140. package/dist/application/retirement/attribution.js.map +1 -1
  141. package/dist/application/retirement/graph.js +19 -1
  142. package/dist/application/retirement/graph.js.map +1 -1
  143. package/dist/application/retirement/journal.js +11 -0
  144. package/dist/application/retirement/journal.js.map +1 -1
  145. package/dist/application/retirement/prepare.js +89 -3
  146. package/dist/application/retirement/prepare.js.map +1 -1
  147. package/dist/application/retirement/preview.js +16 -0
  148. package/dist/application/retirement/preview.js.map +1 -1
  149. package/dist/application/retirement/resolve.js +65 -0
  150. package/dist/application/retirement/resolve.js.map +1 -1
  151. package/dist/application/self/host-states.js +2 -0
  152. package/dist/application/self/host-states.js.map +1 -1
  153. package/dist/application/self/install-skill.js +21 -17
  154. package/dist/application/self/install-skill.js.map +1 -1
  155. package/dist/application/self/mcp-config.js +392 -84
  156. package/dist/application/self/mcp-config.js.map +1 -1
  157. package/dist/application/self/mcp-via-state.js +62 -0
  158. package/dist/application/self/mcp-via-state.js.map +1 -0
  159. package/dist/application/self/uninstall.js +15 -5
  160. package/dist/application/self/uninstall.js.map +1 -1
  161. package/dist/application/session-close-service.js +24 -1
  162. package/dist/application/session-close-service.js.map +1 -1
  163. package/dist/application/session-create-service.js +7 -0
  164. package/dist/application/session-create-service.js.map +1 -1
  165. package/dist/application/session-resume-service.js +2 -2
  166. package/dist/application/session-resume-service.js.map +1 -1
  167. package/dist/application/sessions-service.js +2 -4
  168. package/dist/application/sessions-service.js.map +1 -1
  169. package/dist/application/skills-resolver-service.js +4 -4
  170. package/dist/application/skills-resolver-service.js.map +1 -1
  171. package/dist/application/source-boundary-policy.js +18 -7
  172. package/dist/application/source-boundary-policy.js.map +1 -1
  173. package/dist/application/source-remove-service.js +12 -1
  174. package/dist/application/source-remove-service.js.map +1 -1
  175. package/dist/application/sources-service.js +2 -2
  176. package/dist/application/sources-service.js.map +1 -1
  177. package/dist/application/status-service.js +4 -0
  178. package/dist/application/status-service.js.map +1 -1
  179. package/dist/application/visibility-doctor-service.js +1 -1
  180. package/dist/application/visibility-doctor-service.js.map +1 -1
  181. package/dist/application/workline-index-service.js +182 -27
  182. package/dist/application/workline-index-service.js.map +1 -1
  183. package/dist/application/workspace-init-service.js +89 -271
  184. package/dist/application/workspace-init-service.js.map +1 -1
  185. package/dist/application/workspace-materialization-service.js +300 -0
  186. package/dist/application/workspace-materialization-service.js.map +1 -0
  187. package/dist/application/worktree-service.js +32 -3
  188. package/dist/application/worktree-service.js.map +1 -1
  189. package/dist/cli/commands/capability.js +4 -7
  190. package/dist/cli/commands/capability.js.map +1 -1
  191. package/dist/cli/commands/claims.js +72 -0
  192. package/dist/cli/commands/claims.js.map +1 -0
  193. package/dist/cli/commands/dev-only.js +73 -25
  194. package/dist/cli/commands/dev-only.js.map +1 -1
  195. package/dist/cli/commands/flow.js +145 -42
  196. package/dist/cli/commands/flow.js.map +1 -1
  197. package/dist/cli/commands/index.js +4 -0
  198. package/dist/cli/commands/index.js.map +1 -1
  199. package/dist/cli/commands/mcp.js +752 -76
  200. package/dist/cli/commands/mcp.js.map +1 -1
  201. package/dist/cli/commands/multiroot.js +40 -7
  202. package/dist/cli/commands/multiroot.js.map +1 -1
  203. package/dist/cli/commands/resume.js +9 -3
  204. package/dist/cli/commands/resume.js.map +1 -1
  205. package/dist/cli/commands/retirement.js +9 -0
  206. package/dist/cli/commands/retirement.js.map +1 -1
  207. package/dist/cli/commands/session-create.js +1 -1
  208. package/dist/cli/commands/session-create.js.map +1 -1
  209. package/dist/cli/commands/skills.js +1 -1
  210. package/dist/cli/commands/skills.js.map +1 -1
  211. package/dist/cli/commands/status.js +72 -24
  212. package/dist/cli/commands/status.js.map +1 -1
  213. package/dist/cli/commands/tool.js +141 -0
  214. package/dist/cli/commands/tool.js.map +1 -0
  215. package/dist/cli/commands/workspace-init.js +5 -5
  216. package/dist/cli/commands/workspace-init.js.map +1 -1
  217. package/dist/cli/help-groups.js +6 -1
  218. package/dist/cli/help-groups.js.map +1 -1
  219. package/dist/cli/main.js +272 -67
  220. package/dist/cli/main.js.map +1 -1
  221. package/dist/cli/parser.js +8 -1
  222. package/dist/cli/parser.js.map +1 -1
  223. package/dist/cli/registry.js.map +1 -1
  224. package/dist/cli/render.js +15 -2
  225. package/dist/cli/render.js.map +1 -1
  226. package/dist/cli/tui/app.js +3 -2
  227. package/dist/cli/tui/app.js.map +1 -1
  228. package/dist/cli/tui/components/workspace-init-form.js +7 -7
  229. package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
  230. package/dist/cli/tui/data/workflow-content.js +2 -2
  231. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  232. package/dist/cli/tui/tabs/config-tab.js +4 -3
  233. package/dist/cli/tui/tabs/config-tab.js.map +1 -1
  234. package/dist/cli/tui/tabs/mcp-tab-helpers.js +72 -1
  235. package/dist/cli/tui/tabs/mcp-tab-helpers.js.map +1 -1
  236. package/dist/cli/tui/tabs/mcp-tab.js +101 -42
  237. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  238. package/dist/cli/tui/tabs/project-tab.js +18 -21
  239. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  240. package/dist/cli/tui/workspace-root.js +13 -0
  241. package/dist/cli/tui/workspace-root.js.map +1 -0
  242. package/dist/domain/capability/protocol.js +2 -2
  243. package/dist/domain/capability/protocol.js.map +1 -1
  244. package/dist/domain/database-tools.js +445 -0
  245. package/dist/domain/database-tools.js.map +1 -0
  246. package/dist/domain/degradation-notice.js +60 -0
  247. package/dist/domain/degradation-notice.js.map +1 -0
  248. package/dist/domain/elicitation.js +152 -0
  249. package/dist/domain/elicitation.js.map +1 -0
  250. package/dist/domain/flow/answer.js +173 -42
  251. package/dist/domain/flow/answer.js.map +1 -1
  252. package/dist/domain/flow/authority.js +184 -127
  253. package/dist/domain/flow/authority.js.map +1 -1
  254. package/dist/domain/flow/directive.js +47 -1
  255. package/dist/domain/flow/directive.js.map +1 -1
  256. package/dist/domain/flow/rules.js +7 -4
  257. package/dist/domain/flow/rules.js.map +1 -1
  258. package/dist/domain/flow/run-state.js +636 -31
  259. package/dist/domain/flow/run-state.js.map +1 -1
  260. package/dist/domain/harnesses.js +16 -0
  261. package/dist/domain/harnesses.js.map +1 -1
  262. package/dist/domain/mcp-entry.js +164 -28
  263. package/dist/domain/mcp-entry.js.map +1 -1
  264. package/dist/domain/postgres-object-search.js +320 -0
  265. package/dist/domain/postgres-object-search.js.map +1 -0
  266. package/dist/domain/redaction.js +47 -0
  267. package/dist/domain/redaction.js.map +1 -0
  268. package/dist/domain/retirement/proposal.js +1 -0
  269. package/dist/domain/retirement/proposal.js.map +1 -1
  270. package/dist/domain/structured-choice-stamp.js +32 -4
  271. package/dist/domain/structured-choice-stamp.js.map +1 -1
  272. package/dist/domain/workline-mcp-entry.js +34 -0
  273. package/dist/domain/workline-mcp-entry.js.map +1 -0
  274. package/dist/ports/postgres-tools.js +10 -0
  275. package/dist/ports/postgres-tools.js.map +1 -0
  276. package/dist/runtime/namespace-resolver.js +104 -18
  277. package/dist/runtime/namespace-resolver.js.map +1 -1
  278. package/package.json +5 -1
  279. package/skills/w/README.md +2 -2
  280. package/skills/w/SKILL.md +9 -10
  281. package/skills/w/artifacts/README.md +1 -1
  282. package/skills/w/commands/README.md +3 -3
  283. package/skills/w/commands/persist.md +3 -1
  284. package/skills/w/commands/resume.md +1 -1
  285. package/skills/w/commands/spec-new.md +2 -2
  286. package/skills/w/commands/status.md +1 -1
  287. package/skills/w/commands/workspace-init.md +9 -10
  288. package/skills/w/context/MANIFEST.json +1 -4
  289. package/skills/w/harness/HARNESS.md +1 -1
  290. package/skills/w/loops/quick-loop/LOOP.md +1 -1
  291. package/skills/w/modules/PROMPT-CONTINUITY.md +1 -1
  292. package/skills/w/modules/WORKSPACE-SCAFFOLD.md +17 -20
  293. package/skills/w/schemas/capability-descriptor.schema.json +1 -1
  294. package/dist/application/mcp-dbhub-launcher.js +0 -216
  295. package/dist/application/mcp-dbhub-launcher.js.map +0 -1
@@ -0,0 +1,320 @@
1
+ const EXCLUDED_SCHEMAS = "'pg_catalog', 'information_schema', 'pg_toast'";
2
+ /**
3
+ * Builds the PostgreSQL equivalents of DBHub 1.2.1's object discovery
4
+ * queries. All user-provided filters remain placeholders; the only SQL text
5
+ * selected here comes from the closed tool schema.
6
+ */
7
+ export function buildPostgresObjectSearchQuery(input) {
8
+ switch (input.object_type) {
9
+ case "schema":
10
+ return schemaQuery(input);
11
+ case "table":
12
+ return relationQuery(input, "table");
13
+ case "view":
14
+ return relationQuery(input, "view");
15
+ case "column":
16
+ return columnQuery(input);
17
+ case "procedure":
18
+ return routineQuery(input, "procedure");
19
+ case "function":
20
+ return routineQuery(input, "function");
21
+ case "index":
22
+ return indexQuery(input);
23
+ }
24
+ }
25
+ /**
26
+ * `pg` maps nullable catalog columns to null, while DBHub omits optional
27
+ * comment/description/routine fields. Keep required nullable fields such as
28
+ * `row_count` and `default` intact so the public shape stays compatible.
29
+ */
30
+ export function normalizePostgresObjectSearchRows(_input, rows) {
31
+ return rows.map((row) => {
32
+ const normalized = { ...row };
33
+ dropOptional(normalized, "comment");
34
+ dropOptional(normalized, "description");
35
+ dropOptional(normalized, "return_type");
36
+ dropOptional(normalized, "definition");
37
+ return normalized;
38
+ });
39
+ }
40
+ function dropOptional(row, field) {
41
+ const value = row[field];
42
+ if (value === null || value === undefined || value === "")
43
+ delete row[field];
44
+ }
45
+ function schemaQuery(input) {
46
+ if (input.detail_level === "names") {
47
+ return {
48
+ sql: `SELECT schema_info.schema_name AS name
49
+ FROM information_schema.schemata schema_info
50
+ WHERE schema_info.schema_name NOT IN (${EXCLUDED_SCHEMAS})
51
+ AND schema_info.schema_name ILIKE $1
52
+ ORDER BY schema_info.schema_name ASC
53
+ LIMIT $2`,
54
+ values: [input.pattern, input.limit],
55
+ };
56
+ }
57
+ return {
58
+ sql: `SELECT schema_info.schema_name AS name,
59
+ count(table_info.table_name)::integer AS table_count
60
+ FROM information_schema.schemata schema_info
61
+ LEFT JOIN information_schema.tables table_info
62
+ ON table_info.table_schema = schema_info.schema_name
63
+ AND table_info.table_type = 'BASE TABLE'
64
+ WHERE schema_info.schema_name NOT IN (${EXCLUDED_SCHEMAS})
65
+ AND schema_info.schema_name ILIKE $1
66
+ GROUP BY schema_info.schema_name
67
+ ORDER BY schema_info.schema_name ASC
68
+ LIMIT $2`,
69
+ values: [input.pattern, input.limit],
70
+ };
71
+ }
72
+ function relationQuery(input, objectType) {
73
+ const values = [input.pattern];
74
+ const conditions = [
75
+ `relation_info.table_type = '${objectType === "table" ? "BASE TABLE" : "VIEW"}'`,
76
+ `relation_info.table_schema NOT IN (${EXCLUDED_SCHEMAS})`,
77
+ "relation_info.table_name ILIKE $1",
78
+ ];
79
+ if (input.schema !== undefined) {
80
+ values.push(input.schema);
81
+ conditions.push(`relation_info.table_schema = $${values.length}`);
82
+ }
83
+ values.push(input.limit);
84
+ return {
85
+ sql: `SELECT ${relationFields(objectType, input.detail_level)}
86
+ FROM information_schema.tables relation_info
87
+ JOIN pg_catalog.pg_namespace relation_namespace
88
+ ON relation_namespace.nspname = relation_info.table_schema
89
+ JOIN pg_catalog.pg_class relation_class
90
+ ON relation_class.relnamespace = relation_namespace.oid
91
+ AND relation_class.relname = relation_info.table_name
92
+ WHERE ${conditions.join(" AND ")}
93
+ ORDER BY relation_info.table_schema ASC, relation_info.table_name ASC
94
+ LIMIT $${values.length}`,
95
+ values,
96
+ };
97
+ }
98
+ function relationFields(objectType, detail) {
99
+ const names = "relation_info.table_name AS name, relation_info.table_schema AS schema";
100
+ if (detail === "names")
101
+ return names;
102
+ const summary = [
103
+ names,
104
+ `(
105
+ SELECT count(*)::integer
106
+ FROM information_schema.columns column_info
107
+ WHERE column_info.table_schema = relation_info.table_schema
108
+ AND column_info.table_name = relation_info.table_name
109
+ ) AS column_count`,
110
+ ...(objectType === "table"
111
+ ? [
112
+ `CASE
113
+ WHEN relation_class.reltuples >= 0 THEN relation_class.reltuples::bigint::double precision
114
+ ELSE NULL
115
+ END AS row_count`,
116
+ ]
117
+ : []),
118
+ "obj_description(relation_class.oid, 'pg_class') AS comment",
119
+ ];
120
+ if (detail === "summary")
121
+ return summary.join(",\n ");
122
+ const columns = `COALESCE((
123
+ SELECT jsonb_agg(
124
+ jsonb_build_object(
125
+ 'name', column_info.column_name,
126
+ 'type', column_info.data_type,
127
+ 'nullable', column_info.is_nullable = 'YES',
128
+ 'default', column_info.column_default
129
+ ) || CASE
130
+ WHEN column_description.description IS NULL THEN '{}'::jsonb
131
+ ELSE jsonb_build_object('description', column_description.description)
132
+ END
133
+ ORDER BY column_info.ordinal_position
134
+ )
135
+ FROM information_schema.columns column_info
136
+ LEFT JOIN pg_catalog.pg_description column_description
137
+ ON column_description.objoid = relation_class.oid
138
+ AND column_description.objsubid = column_info.ordinal_position
139
+ WHERE column_info.table_schema = relation_info.table_schema
140
+ AND column_info.table_name = relation_info.table_name
141
+ ), '[]'::jsonb) AS columns`;
142
+ const indexes = objectType === "table"
143
+ ? `COALESCE((
144
+ SELECT jsonb_agg(
145
+ jsonb_build_object(
146
+ 'name', index_info.name,
147
+ 'columns', index_info.columns,
148
+ 'unique', index_info.unique,
149
+ 'primary', index_info.primary
150
+ )
151
+ ORDER BY index_info.name
152
+ )
153
+ FROM (
154
+ SELECT index_class.relname AS name,
155
+ array_agg(attribute.attname ORDER BY indexed_attribute.ordinality) AS columns,
156
+ index_definition.indisunique AS unique,
157
+ index_definition.indisprimary AS primary
158
+ FROM pg_catalog.pg_index index_definition
159
+ JOIN pg_catalog.pg_class index_class ON index_class.oid = index_definition.indexrelid
160
+ CROSS JOIN LATERAL unnest(index_definition.indkey) WITH ORDINALITY
161
+ AS indexed_attribute(attnum, ordinality)
162
+ JOIN pg_catalog.pg_attribute attribute
163
+ ON attribute.attrelid = relation_class.oid
164
+ AND attribute.attnum = indexed_attribute.attnum
165
+ AND attribute.attnum > 0
166
+ AND NOT attribute.attisdropped
167
+ WHERE index_definition.indrelid = relation_class.oid
168
+ GROUP BY index_class.relname, index_definition.indisunique, index_definition.indisprimary
169
+ ) index_info
170
+ ), '[]'::jsonb) AS indexes`
171
+ : "'[]'::jsonb AS indexes";
172
+ return [...summary, columns, indexes].join(",\n ");
173
+ }
174
+ function columnQuery(input) {
175
+ const values = [input.pattern];
176
+ const conditions = [
177
+ "column_info.column_name ILIKE $1",
178
+ `column_info.table_schema NOT IN (${EXCLUDED_SCHEMAS})`,
179
+ "relation_info.table_type IN ('BASE TABLE', 'VIEW')",
180
+ ];
181
+ if (input.schema !== undefined) {
182
+ values.push(input.schema);
183
+ conditions.push(`column_info.table_schema = $${values.length}`);
184
+ }
185
+ if (input.table !== undefined) {
186
+ values.push(input.table);
187
+ conditions.push(`column_info.table_name = $${values.length}`);
188
+ }
189
+ values.push(input.limit);
190
+ const fields = input.detail_level === "names"
191
+ ? 'column_info.column_name AS name, column_info.table_name AS "table", column_info.table_schema AS schema'
192
+ : `column_info.column_name AS name,
193
+ column_info.table_name AS "table",
194
+ column_info.table_schema AS schema,
195
+ column_info.data_type AS type,
196
+ column_info.is_nullable = 'YES' AS nullable,
197
+ column_info.column_default AS "default",
198
+ column_description.description AS description`;
199
+ return {
200
+ sql: `SELECT ${fields}
201
+ FROM information_schema.columns column_info
202
+ JOIN information_schema.tables relation_info
203
+ ON relation_info.table_schema = column_info.table_schema
204
+ AND relation_info.table_name = column_info.table_name
205
+ LEFT JOIN pg_catalog.pg_namespace relation_namespace
206
+ ON relation_namespace.nspname = column_info.table_schema
207
+ LEFT JOIN pg_catalog.pg_class relation_class
208
+ ON relation_class.relnamespace = relation_namespace.oid
209
+ AND relation_class.relname = column_info.table_name
210
+ LEFT JOIN pg_catalog.pg_description column_description
211
+ ON column_description.objoid = relation_class.oid
212
+ AND column_description.objsubid = column_info.ordinal_position
213
+ WHERE ${conditions.join(" AND ")}
214
+ ORDER BY column_info.table_schema ASC,
215
+ CASE WHEN relation_info.table_type = 'BASE TABLE' THEN 0 ELSE 1 END ASC,
216
+ column_info.table_name ASC,
217
+ column_info.ordinal_position ASC
218
+ LIMIT $${values.length}`,
219
+ values,
220
+ };
221
+ }
222
+ function routineQuery(input, objectType) {
223
+ const values = [input.pattern];
224
+ const routineType = objectType === "procedure" ? "PROCEDURE" : "FUNCTION";
225
+ const conditions = [
226
+ `routine_info.routine_type = '${routineType}'`,
227
+ `routine_info.routine_schema NOT IN (${EXCLUDED_SCHEMAS})`,
228
+ "routine_info.routine_name ILIKE $1",
229
+ ];
230
+ if (input.schema !== undefined) {
231
+ values.push(input.schema);
232
+ conditions.push(`routine_info.routine_schema = $${values.length}`);
233
+ }
234
+ values.push(input.limit);
235
+ const names = "routine_info.routine_name AS name, routine_info.routine_schema AS schema";
236
+ const fields = input.detail_level === "names"
237
+ ? names
238
+ : `${names},
239
+ CASE WHEN routine_info.routine_type = 'PROCEDURE' THEN 'procedure' ELSE 'function' END AS type,
240
+ COALESCE(routine_info.external_language, 'sql') AS language,
241
+ CASE WHEN routine_info.data_type = 'void' THEN NULL ELSE routine_info.data_type END AS return_type${input.detail_level === "full"
242
+ ? `,
243
+ COALESCE((
244
+ SELECT string_agg(
245
+ parameter_info.parameter_name || ' ' || parameter_info.parameter_mode || ' ' || parameter_info.data_type,
246
+ ', ' ORDER BY parameter_info.ordinal_position
247
+ )
248
+ FROM information_schema.parameters parameter_info
249
+ WHERE parameter_info.specific_schema = routine_info.specific_schema
250
+ AND parameter_info.specific_name = routine_info.specific_name
251
+ AND parameter_info.parameter_name IS NOT NULL
252
+ ), '') AS parameters,
253
+ NULLIF(routine_info.routine_definition, '') AS definition`
254
+ : ""}`;
255
+ return {
256
+ sql: `SELECT ${fields}
257
+ FROM information_schema.routines routine_info
258
+ WHERE ${conditions.join(" AND ")}
259
+ ORDER BY routine_info.routine_schema ASC,
260
+ routine_info.routine_name ASC,
261
+ routine_info.specific_name ASC
262
+ LIMIT $${values.length}`,
263
+ values,
264
+ };
265
+ }
266
+ function indexQuery(input) {
267
+ const values = [input.pattern];
268
+ const conditions = [
269
+ "index_class.relname ILIKE $1",
270
+ `relation_info.table_schema NOT IN (${EXCLUDED_SCHEMAS})`,
271
+ "relation_info.table_type = 'BASE TABLE'",
272
+ ];
273
+ if (input.schema !== undefined) {
274
+ values.push(input.schema);
275
+ conditions.push(`relation_info.table_schema = $${values.length}`);
276
+ }
277
+ if (input.table !== undefined) {
278
+ values.push(input.table);
279
+ conditions.push(`relation_info.table_name = $${values.length}`);
280
+ }
281
+ values.push(input.limit);
282
+ const names = 'index_class.relname AS name, relation_info.table_name AS "table", relation_info.table_schema AS schema';
283
+ const fields = input.detail_level === "names"
284
+ ? names
285
+ : `${names},
286
+ array_agg(attribute.attname ORDER BY indexed_attribute.ordinality) AS columns,
287
+ index_definition.indisunique AS unique,
288
+ index_definition.indisprimary AS primary`;
289
+ return {
290
+ sql: `SELECT ${fields}
291
+ FROM information_schema.tables relation_info
292
+ JOIN pg_catalog.pg_namespace relation_namespace
293
+ ON relation_namespace.nspname = relation_info.table_schema
294
+ JOIN pg_catalog.pg_class relation_class
295
+ ON relation_class.relnamespace = relation_namespace.oid
296
+ AND relation_class.relname = relation_info.table_name
297
+ JOIN pg_catalog.pg_index index_definition ON index_definition.indrelid = relation_class.oid
298
+ JOIN pg_catalog.pg_class index_class ON index_class.oid = index_definition.indexrelid
299
+ CROSS JOIN LATERAL unnest(index_definition.indkey) WITH ORDINALITY
300
+ AS indexed_attribute(attnum, ordinality)
301
+ JOIN pg_catalog.pg_attribute attribute
302
+ ON attribute.attrelid = relation_class.oid
303
+ AND attribute.attnum = indexed_attribute.attnum
304
+ AND attribute.attnum > 0
305
+ AND NOT attribute.attisdropped
306
+ WHERE ${conditions.join(" AND ")}
307
+ GROUP BY index_class.relname,
308
+ relation_info.table_name,
309
+ relation_info.table_schema,
310
+ index_definition.indisunique,
311
+ index_definition.indisprimary,
312
+ index_definition.indkey
313
+ ORDER BY relation_info.table_schema ASC,
314
+ relation_info.table_name ASC,
315
+ index_class.relname ASC
316
+ LIMIT $${values.length}`,
317
+ values,
318
+ };
319
+ }
320
+ //# sourceMappingURL=postgres-object-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-object-search.js","sourceRoot":"","sources":["../../src/domain/postgres-object-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Pure last-line defense for values that may be reflected in operational logs
3
+ * or CLI errors. Domain validation still avoids echoing untrusted values; this
4
+ * catches URI and assignment-shaped credentials from unexpected call paths.
5
+ */
6
+ const CONNECTION_URI = /\b((?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?):\/\/)[^\s"'<>]+/gi;
7
+ const SECRET_ASSIGNMENT = /((?:--?(?:token|secret|password|passwd|pwd|api[-_]?key|key|auth(?:orization)?|dsn|database[-_]?url|pgpassword|pgpassfile)|["']?(?:token|secret|password|passwd|pwd|api[-_]?key|key|auth(?:orization)?|dsn|database[-_]?url|pgpassword|pgpassfile)["']?)\s*(?:=|:|\s+)\s*)(?:"[^"]*"|'[^']*'|[^\s,}\]]+)/gi;
8
+ const SENSITIVE_KEY = /(?:^|_)(?:access_key|api_key|auth(?:orization)?|client_secret|connection_string|connection_url|connectionstring|connectionurl|credential(?:s)?|database_url|databaseurl|dsn|key|password|passwd|pgpassfile|pgpassword|private_key|pwd|secret|secrets|token|tokens)(?:_|$)/i;
9
+ export function redactSensitiveText(text) {
10
+ return text
11
+ .replace(CONNECTION_URI, "$1***")
12
+ .replace(SECRET_ASSIGNMENT, "$1***")
13
+ .replace(/\bBearer\s+\S+/gi, "Bearer ***");
14
+ }
15
+ /** Detect semantic secret fields even when their opaque value has no recognizable syntax. */
16
+ export function isSensitiveKey(key) {
17
+ const normalized = key
18
+ .replace(/([a-z0-9])([A-Z])/g, "$1_$2")
19
+ .replace(/[-\s]+/g, "_")
20
+ .toLowerCase();
21
+ return SENSITIVE_KEY.test(normalized);
22
+ }
23
+ /** Safe predicate for configuration shapes that must never reflect credentials. */
24
+ export function containsSensitiveData(value) {
25
+ if (typeof value === "string")
26
+ return redactSensitiveText(value) !== value;
27
+ if (Array.isArray(value))
28
+ return value.some(containsSensitiveData);
29
+ if (value !== null && typeof value === "object") {
30
+ return Object.entries(value).some(([key, nested]) => isSensitiveKey(key) || containsSensitiveData(nested));
31
+ }
32
+ return false;
33
+ }
34
+ export function redactSensitiveValue(value) {
35
+ if (typeof value === "string")
36
+ return redactSensitiveText(value);
37
+ if (Array.isArray(value))
38
+ return value.map(redactSensitiveValue);
39
+ if (value !== null && typeof value === "object") {
40
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [
41
+ key,
42
+ isSensitiveKey(key) ? "***" : redactSensitiveValue(nested),
43
+ ]));
44
+ }
45
+ return value;
46
+ }
47
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../src/domain/redaction.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,cAAc,GAAG,kEAAkE,CAAC;AAC1F,MAAM,iBAAiB,GACrB,2SAA2S,CAAC;AAC9S,MAAM,aAAa,GACjB,4QAA4Q,CAAC;AAE/Q,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI;SACR,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC;SAChC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,MAAM,UAAU,GAAG,GAAG;SACnB,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,WAAW,EAAE,CAAC;IACjB,OAAO,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC;IAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAC/B,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACjE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACjE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;YAC3C,GAAG;YACH,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC;SAC3D,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -58,6 +58,7 @@ export function retirementDigest(body) {
58
58
  custody: [...body.custody].sort((a, b) => order(a.session, b.session)),
59
59
  bindings: [...body.bindings].sort(order),
60
60
  units: [...body.units].sort((a, b) => order(`${a.alias}/${a.session}`, `${b.alias}/${b.session}`)),
61
+ reservations: [...body.reservations].sort((a, b) => order(a.path, b.path)),
61
62
  dirty: [...body.dirty]
62
63
  .map((d) => ({ ...d, paths: [...d.paths].sort(order) }))
63
64
  .sort((a, b) => order(a.alias, b.alias)),
@@ -1 +1 @@
1
- {"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../../src/domain/retirement/proposal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proposal.js","sourceRoot":"","sources":["../../../src/domain/retirement/proposal.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@
19
19
  * documentation: it says which mechanism, its ceilings, where the sentence goes,
20
20
  * and when to fall back. The reasoning behind the rule lives in `HARNESS.md`.
21
21
  */
22
- import { harnessByInstallTarget } from "./harnesses.js";
22
+ import { harnessByInstallTarget, } from "./harnesses.js";
23
23
  /**
24
24
  * The universal floor, spelled the same way on every host — including the ones
25
25
  * that reach it as a fallback. Kept in one constant so a host that degrades and a
@@ -28,6 +28,25 @@ import { harnessByInstallTarget } from "./harnesses.js";
28
28
  */
29
29
  const LABELED_MARKDOWN = "labeled markdown — every option as `Label — functional sentence`, the `flow` control (`Compactar`/`Cerrar`) always among them, answered by label or `Aceptar recomendaciones`";
30
30
  const CONTENT_RULE = "Degrade the mechanism, never the content: no alternative is merged, truncated or dropped to fit, and any loss is declared as a degradation.";
31
+ /**
32
+ * La vía MCP, dicha para el agente que la va a usar.
33
+ *
34
+ * Va DESPUÉS de la herramienta del host y ANTES del markdown, porque ése es el
35
+ * orden de riqueza: donde el host ofrece la suya manda la suya, y esta vía entra a
36
+ * recuperar lo que hoy degrada — no a sustituir un mecanismo que funciona.
37
+ *
38
+ * Dice qué hacer con cada clase de no-respuesta sin inferir quién la produjo: el
39
+ * protocolo no vuelve observable la política de arranque ni la persona que cerró
40
+ * el selector.
41
+ */
42
+ function mcpClause(via) {
43
+ if (!via.available)
44
+ return [];
45
+ return [
46
+ "When it is not, present it with `structured_choice` of the `agent-workflow` MCP server, which renders this host's own selector; its first call asks you to approve that tool, so say so, and note that persisting the approval stops it interrupting every later boundary.",
47
+ "A decline, cancellation or empty answer leaves the boundary pending: state only what the protocol returned, present labeled markdown with every option intact, and never record a choice nobody made.",
48
+ ];
49
+ }
31
50
  /**
32
51
  * The stamp for one host, as a markdown blockquote (no trailing newline).
33
52
  *
@@ -62,15 +81,24 @@ export function renderStructuredChoiceStamp(spec) {
62
81
  if (binding.customAnswer) {
63
82
  lines.push("It already offers a free-text answer, so do not add an `Other` option of your own.");
64
83
  }
65
- lines.push(`When ${binding.fallbackReason}, fall back to ${LABELED_MARKDOWN}.`);
84
+ lines.push(...mcpClause(binding.mcpElicitation));
85
+ lines.push(`When neither is available, fall back to ${LABELED_MARKDOWN}. (${binding.fallbackReason}.)`);
66
86
  // A degraded host's own prompt tends to prefer prose exactly where the tool is
67
87
  // missing (codex: "never write a multiple choice question as a textual
68
88
  // assistant message") — and prose silently drops the alternatives.
69
89
  lines.push("Even where this host's own guidance prefers a plain-text question, a Workline boundary still presents every option.");
70
90
  }
71
91
  else {
72
- lines[0] += ` Present every human and authorization boundary as ${LABELED_MARKDOWN}.`;
73
- lines.push(`This host exposes no native selection surface: ${binding.fallbackReason}.`);
92
+ const via = mcpClause(binding.mcpElicitation);
93
+ if (via.length === 0) {
94
+ lines[0] += ` Present every human and authorization boundary as ${LABELED_MARKDOWN}.`;
95
+ lines.push(`This host exposes no native selection surface: ${binding.fallbackReason}.`);
96
+ }
97
+ else {
98
+ // Sin herramienta propia, la vía MCP no es un respaldo: es el mecanismo.
99
+ lines[0] += " It offers no question tool of its own.";
100
+ lines.push(...via.map((line) => line.replace("When it is not, present it", "Present every boundary")));
101
+ }
74
102
  }
75
103
  lines.push(CONTENT_RULE);
76
104
  return lines.map((line) => `> ${line}`).join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"structured-choice-stamp.js","sourceRoot":"","sources":["../../src/domain/structured-choice-stamp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structured-choice-stamp.js","sourceRoot":"","sources":["../../src/domain/structured-choice-stamp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * La entrada histórica con la que un host ofrecía el servidor de elicitation.
3
+ *
4
+ * Se conserva para reconocer esa forma con exactitud. La instalación de skills no
5
+ * vuelve a escribirla: un descriptor MCP global requiere una acción explícita.
6
+ *
7
+ * El comando es el propio binario del CLI, con el envoltorio de Windows que
8
+ * `buildMcpEntry` ya resolvió para el servidor de base de datos: allá el bin global es un
9
+ * `.cmd`, y un host que lo lanza sin shell falla con ENOENT. Repetir el criterio
10
+ * es reusar una decisión ya probada, no copiar código.
11
+ */
12
+ /**
13
+ * El nombre de la entrada.
14
+ *
15
+ * Distinto de cualquier conexión que la persona registre —esas se nombran por su
16
+ * instancia— para que la retirada pueda quitar exactamente la nuestra sin rozar
17
+ * las ajenas.
18
+ */
19
+ export const WORKLINE_MCP_ENTRY_NAME = "agent-workflow";
20
+ /**
21
+ * El host viajaba en los argumentos porque el servidor no podía detectarlo desde
22
+ * adentro. Esta forma existe sólo como firma de una configuración legacy.
23
+ */
24
+ export function worklineMcpEntry(host, platform = process.platform) {
25
+ const isWin = platform === "win32";
26
+ const serve = ["mcp", "serve", "--host", host];
27
+ return {
28
+ name: WORKLINE_MCP_ENTRY_NAME,
29
+ command: isWin ? "cmd" : "agent-workflow",
30
+ args: isWin ? ["/c", "agent-workflow", ...serve] : serve,
31
+ env: {},
32
+ };
33
+ }
34
+ //# sourceMappingURL=workline-mcp-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workline-mcp-entry.js","sourceRoot":"","sources":["../../src/domain/workline-mcp-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,WAAmB,OAAO,CAAC,QAAQ;IAChF,MAAM,KAAK,GAAG,QAAQ,KAAK,OAAO,CAAC;IACnC,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/C,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB;QACzC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;QACxD,GAAG,EAAE,EAAE;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** A driver-safe failure that can cross the PostgreSQL seam without secrets. */
2
+ export class PostgresToolError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ this.name = "PostgresToolError";
8
+ }
9
+ }
10
+ //# sourceMappingURL=postgres-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-tools.js","sourceRoot":"","sources":["../../src/ports/postgres-tools.ts"],"names":[],"mappings":"AAeA,gFAAgF;AAChF,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAE/B;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}