@noodleseed/one 0.121.0 → 0.122.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 (152) hide show
  1. package/dist/commands/session.d.ts.map +1 -1
  2. package/dist/commands/session.js +5 -2
  3. package/dist/commands/session.js.map +1 -1
  4. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
  5. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
  6. package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +4 -4
  7. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js +8 -8
  8. package/node_modules/@noodle-borg/agent-kit/dist/plugin-submission.js.map +1 -1
  9. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +1 -1
  10. package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
  11. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  12. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  13. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts +30 -9
  14. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.d.ts.map +1 -1
  15. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js +21 -6
  16. package/node_modules/@noodle-borg/developer-mcp/dist/contracts.js.map +1 -1
  17. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts +2 -1
  18. package/node_modules/@noodle-borg/developer-mcp/dist/port.d.ts.map +1 -1
  19. package/node_modules/@noodle-borg/developer-mcp/dist/port.js.map +1 -1
  20. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js +3 -3
  21. package/node_modules/@noodle-borg/developer-mcp/dist/prompts.js.map +1 -1
  22. package/node_modules/@noodle-borg/developer-mcp/dist/resources.d.ts.map +1 -1
  23. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js +10 -9
  24. package/node_modules/@noodle-borg/developer-mcp/dist/resources.js.map +1 -1
  25. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts +4 -3
  26. package/node_modules/@noodle-borg/developer-mcp/dist/results.d.ts.map +1 -1
  27. package/node_modules/@noodle-borg/developer-mcp/dist/results.js +5 -19
  28. package/node_modules/@noodle-borg/developer-mcp/dist/results.js.map +1 -1
  29. package/node_modules/@noodle-borg/developer-mcp/dist/server.js +3 -3
  30. package/node_modules/@noodle-borg/developer-mcp/dist/server.js.map +1 -1
  31. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.d.ts.map +1 -1
  32. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js +6 -25
  33. package/node_modules/@noodle-borg/developer-mcp/dist/tools/apps.js.map +1 -1
  34. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts +16 -3
  35. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.d.ts.map +1 -1
  36. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js +22 -19
  37. package/node_modules/@noodle-borg/developer-mcp/dist/tools/context.js.map +1 -1
  38. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.d.ts.map +1 -1
  39. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js +3 -9
  40. package/node_modules/@noodle-borg/developer-mcp/dist/tools/deployments.js.map +1 -1
  41. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.d.ts.map +1 -1
  42. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js +15 -16
  43. package/node_modules/@noodle-borg/developer-mcp/dist/tools/diagnose.js.map +1 -1
  44. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.d.ts.map +1 -1
  45. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js +9 -17
  46. package/node_modules/@noodle-borg/developer-mcp/dist/tools/operations.js.map +1 -1
  47. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.d.ts.map +1 -1
  48. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js +7 -10
  49. package/node_modules/@noodle-borg/developer-mcp/dist/tools/rollback.js.map +1 -1
  50. package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts +41 -17
  51. package/node_modules/@noodle-borg/knowledge/dist/budget.d.ts.map +1 -1
  52. package/node_modules/@noodle-borg/knowledge/dist/budget.js +0 -0
  53. package/node_modules/@noodle-borg/knowledge/dist/budget.js.map +1 -1
  54. package/node_modules/@noodle-borg/knowledge/dist/index.d.ts +1 -0
  55. package/node_modules/@noodle-borg/knowledge/dist/index.d.ts.map +1 -1
  56. package/node_modules/@noodle-borg/knowledge/dist/index.js +1 -0
  57. package/node_modules/@noodle-borg/knowledge/dist/index.js.map +1 -1
  58. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts +22 -0
  59. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.d.ts.map +1 -0
  60. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js +102 -0
  61. package/node_modules/@noodle-borg/knowledge/dist/postgres-budget-store.js.map +1 -0
  62. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts +5 -3
  63. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.d.ts.map +1 -1
  64. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js +61 -1
  65. package/node_modules/@noodle-borg/knowledge/dist/postgres-revision-store.js.map +1 -1
  66. package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts +28 -1
  67. package/node_modules/@noodle-borg/knowledge/dist/revision-store.d.ts.map +1 -1
  68. package/node_modules/@noodle-borg/knowledge/dist/revision-store.js +39 -0
  69. package/node_modules/@noodle-borg/knowledge/dist/revision-store.js.map +1 -1
  70. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts +6 -4
  71. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.d.ts.map +1 -1
  72. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js +13 -16
  73. package/node_modules/@noodle-borg/service/dist/auth/developer-grant-guard.js.map +1 -1
  74. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +3 -2
  75. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -1
  76. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +66 -47
  77. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -1
  78. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.d.ts.map +1 -1
  79. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js +15 -16
  80. package/node_modules/@noodle-borg/service/dist/developer-mcp/mount.js.map +1 -1
  81. package/node_modules/@noodle-borg/service/dist/index.d.ts +2 -2
  82. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  83. package/node_modules/@noodle-borg/service/dist/index.js +1 -1
  84. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  85. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +0 -2
  86. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
  87. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js +0 -16
  88. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.js.map +1 -1
  89. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts +3 -28
  90. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.d.ts.map +1 -1
  91. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js +8 -67
  92. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-authorizer.js.map +1 -1
  93. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts +0 -4
  94. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.d.ts.map +1 -1
  95. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js +1 -14
  96. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-bootstrap.js.map +1 -1
  97. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts +1 -1
  98. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -1
  99. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +45 -36
  100. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -1
  101. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts +2 -2
  102. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -1
  103. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +20 -229
  104. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -1
  105. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts +3 -2
  106. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.d.ts.map +1 -1
  107. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js +70 -36
  108. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-store-postgres.js.map +1 -1
  109. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts +17 -6
  110. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.d.ts.map +1 -1
  111. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js +98 -26
  112. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant.js.map +1 -1
  113. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
  114. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +0 -2
  115. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
  116. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +1 -1
  117. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -1
  118. package/node_modules/@noodle-borg/service/dist/routes/analytics.js +3 -3
  119. package/node_modules/@noodle-borg/service/dist/routes/analytics.js.map +1 -1
  120. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
  121. package/node_modules/@noodle-borg/service/dist/routes/apps.js +6 -27
  122. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
  123. package/node_modules/@noodle-borg/service/dist/routes/config-values.d.ts.map +1 -1
  124. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +5 -8
  125. package/node_modules/@noodle-borg/service/dist/routes/config-values.js.map +1 -1
  126. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts +7 -6
  127. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  128. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +7 -6
  129. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  130. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js +1 -1
  131. package/node_modules/@noodle-borg/service/dist/routes/deploy-preflight.js.map +1 -1
  132. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.d.ts.map +1 -1
  133. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js +2 -7
  134. package/node_modules/@noodle-borg/service/dist/routes/deployment-package.js.map +1 -1
  135. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  136. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +7 -20
  137. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  138. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +1 -1
  139. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
  140. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
  141. package/node_modules/@noodle-borg/service/dist/routes/envs.js +4 -8
  142. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
  143. package/node_modules/@noodle-borg/service/dist/routes/logs.js +1 -1
  144. package/node_modules/@noodle-borg/service/dist/routes/logs.js.map +1 -1
  145. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +1 -1
  146. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  147. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  148. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +21 -0
  149. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  150. package/node_modules/@noodle-borg/service/package.json +1 -1
  151. package/node_modules/@noodleseed/assistant/package.json +41 -16
  152. package/package.json +2 -2
@@ -1,47 +1,45 @@
1
1
  import { appInspectionViewSchema, diagnoseAppInputSchema, } from '../contracts.js';
2
2
  import { diagnoseEvidence, diagnosisViewSchema, } from '../diagnosis.js';
3
- import { forbiddenEnvironment, portError, successResult, validationError, } from '../results.js';
3
+ import { portError, successResult, validationError } from '../results.js';
4
4
  export async function diagnoseApp(context, input) {
5
5
  const parsed = diagnoseAppInputSchema.safeParse(input);
6
6
  if (!parsed.success)
7
7
  return validationError(context, 'Invalid diagnose_app input.');
8
- const { app, env } = parsed.data;
9
- if (!context.ctx.environments.includes(env)) {
10
- return forbiddenEnvironment(context, env);
11
- }
8
+ const { org, app, env } = parsed.data;
12
9
  let appView;
13
10
  try {
14
- appView = appInspectionViewSchema.parse(await context.controlPlane.inspectApp(context.ctx, { app, env }));
11
+ appView = appInspectionViewSchema.parse(await context.controlPlane.inspectApp(context.ctx, { org, app, env }));
15
12
  }
16
13
  catch (error) {
17
- return portError(context, error, env);
14
+ return portError(context, error, org, env);
18
15
  }
19
16
  const evidence = { app: { active: appView.active } };
20
17
  const sources = ['app'];
21
18
  const unavailable = [];
22
19
  if (appView.latest === undefined || appView.latest.environment !== env) {
23
- return diagnosisResult(context, app, env, evidence, sources, unavailable);
20
+ return diagnosisResult(context, org, app, env, evidence, sources, unavailable);
24
21
  }
25
22
  try {
26
23
  const deployment = await context.controlPlane.inspectDeployment(context.ctx, {
24
+ org,
27
25
  deploymentId: appView.latest.deploymentId,
28
26
  });
29
27
  evidenceWith(evidence, 'deployment', deployment);
30
28
  sources.push('deployment');
31
29
  if (deployment.health.state === 'ready') {
32
- await collectMetrics(context, app, env, evidence, sources, unavailable);
30
+ await collectMetrics(context, org, app, env, evidence, sources, unavailable);
33
31
  }
34
32
  else {
35
- await collectLogs(context, app, env, evidence, sources, unavailable);
33
+ await collectLogs(context, org, app, env, evidence, sources, unavailable);
36
34
  }
37
35
  }
38
36
  catch {
39
37
  unavailable.push('deployment');
40
38
  }
41
- return diagnosisResult(context, app, env, evidence, sources, unavailable);
39
+ return diagnosisResult(context, org, app, env, evidence, sources, unavailable);
42
40
  }
43
- async function collectMetrics(context, app, env, evidence, sources, unavailable) {
44
- const input = { app, env, window: '24h' };
41
+ async function collectMetrics(context, org, app, env, evidence, sources, unavailable) {
42
+ const input = { org, app, env, window: '24h' };
45
43
  try {
46
44
  evidenceWith(evidence, 'metrics', await context.controlPlane.getMetrics(context.ctx, input));
47
45
  sources.push('metrics');
@@ -50,8 +48,8 @@ async function collectMetrics(context, app, env, evidence, sources, unavailable)
50
48
  unavailable.push('metrics');
51
49
  }
52
50
  }
53
- async function collectLogs(context, app, env, evidence, sources, unavailable) {
54
- const input = { app, env, limit: 50, level: 'error' };
51
+ async function collectLogs(context, org, app, env, evidence, sources, unavailable) {
52
+ const input = { org, app, env, limit: 50, level: 'error' };
55
53
  try {
56
54
  evidenceWith(evidence, 'logs', await context.controlPlane.getLogs(context.ctx, input));
57
55
  sources.push('logs');
@@ -63,7 +61,7 @@ async function collectLogs(context, app, env, evidence, sources, unavailable) {
63
61
  function evidenceWith(evidence, key, value) {
64
62
  evidence[key] = value;
65
63
  }
66
- function diagnosisResult(context, app, env, evidence, sources, unavailable) {
64
+ function diagnosisResult(context, org, app, env, evidence, sources, unavailable) {
67
65
  const data = diagnosisViewSchema.parse({
68
66
  app,
69
67
  env,
@@ -73,6 +71,7 @@ function diagnosisResult(context, app, env, evidence, sources, unavailable) {
73
71
  return successResult({
74
72
  ...context,
75
73
  data,
74
+ org,
76
75
  env,
77
76
  summary: data.findings.length === 0
78
77
  ? `${app}/${env} is healthy in the observed evidence.`
@@ -1 +1 @@
1
- {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/tools/diagnose.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AAEvB,UAAU,qBAAsB,SAAQ,aAAa;IACnD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;IAqB3E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuB9E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuB9E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAuB9E"}
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAa,KAAK,aAAa,EAAkC,MAAM,eAAe,CAAC;AAE9F,UAAU,qBAAsB,SAAQ,aAAa;IACnD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;IAmB3E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqB9E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqB9E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAqB9E"}
@@ -1,17 +1,15 @@
1
1
  import { eventsViewSchema, getLogsInputSchema, getMetricsInputSchema, getSessionInputSchema, listEventsInputSchema, logsViewSchema, metricsViewSchema, sessionViewSchema, } from '../contracts.js';
2
- import { forbiddenEnvironment, portError, successResult, validationError, } from '../results.js';
2
+ import { portError, successResult, validationError } from '../results.js';
3
3
  export async function getLogs(context, input) {
4
4
  const parsed = getLogsInputSchema.safeParse(input);
5
5
  if (!parsed.success)
6
6
  return validationError(context, 'Invalid get_logs input.');
7
- if (!context.ctx.environments.includes(parsed.data.env)) {
8
- return forbiddenEnvironment(context, parsed.data.env);
9
- }
10
7
  try {
11
8
  const data = logsViewSchema.parse(await context.controlPlane.getLogs(context.ctx, parsed.data));
12
9
  return successResult({
13
10
  ...context,
14
11
  data,
12
+ org: parsed.data.org,
15
13
  env: parsed.data.env,
16
14
  summary: `${data.events.length} recent log event${data.events.length === 1 ? '' : 's'} for ${parsed.data.app}/${parsed.data.env}.`,
17
15
  nextActions: [
@@ -21,21 +19,19 @@ export async function getLogs(context, input) {
21
19
  });
22
20
  }
23
21
  catch (error) {
24
- return portError(context, error, parsed.data.env);
22
+ return portError(context, error, parsed.data.org, parsed.data.env);
25
23
  }
26
24
  }
27
25
  export async function getMetrics(context, input) {
28
26
  const parsed = getMetricsInputSchema.safeParse(input);
29
27
  if (!parsed.success)
30
28
  return validationError(context, 'Invalid get_metrics input.');
31
- if (!context.ctx.environments.includes(parsed.data.env)) {
32
- return forbiddenEnvironment(context, parsed.data.env);
33
- }
34
29
  try {
35
30
  const data = metricsViewSchema.parse(await context.controlPlane.getMetrics(context.ctx, parsed.data));
36
31
  return successResult({
37
32
  ...context,
38
33
  data,
34
+ org: parsed.data.org,
39
35
  env: parsed.data.env,
40
36
  summary: `${data.metrics.totals.requests} requests observed${data.truncated ? ' (partial window)' : ''}.`,
41
37
  nextActions: [
@@ -45,21 +41,19 @@ export async function getMetrics(context, input) {
45
41
  });
46
42
  }
47
43
  catch (error) {
48
- return portError(context, error, parsed.data.env);
44
+ return portError(context, error, parsed.data.org, parsed.data.env);
49
45
  }
50
46
  }
51
47
  export async function listEvents(context, input) {
52
48
  const parsed = listEventsInputSchema.safeParse(input);
53
49
  if (!parsed.success)
54
50
  return validationError(context, 'Invalid list_events input.');
55
- if (!context.ctx.environments.includes(parsed.data.env)) {
56
- return forbiddenEnvironment(context, parsed.data.env);
57
- }
58
51
  try {
59
52
  const data = eventsViewSchema.parse(await context.controlPlane.listEvents(context.ctx, parsed.data));
60
53
  return successResult({
61
54
  ...context,
62
55
  data,
56
+ org: parsed.data.org,
63
57
  env: parsed.data.env,
64
58
  summary: `${data.events.length} request event${data.events.length === 1 ? '' : 's'} matched.`,
65
59
  nextActions: [
@@ -69,21 +63,19 @@ export async function listEvents(context, input) {
69
63
  });
70
64
  }
71
65
  catch (error) {
72
- return portError(context, error, parsed.data.env);
66
+ return portError(context, error, parsed.data.org, parsed.data.env);
73
67
  }
74
68
  }
75
69
  export async function getSession(context, input) {
76
70
  const parsed = getSessionInputSchema.safeParse(input);
77
71
  if (!parsed.success)
78
72
  return validationError(context, 'Invalid get_session input.');
79
- if (!context.ctx.environments.includes(parsed.data.env)) {
80
- return forbiddenEnvironment(context, parsed.data.env);
81
- }
82
73
  try {
83
74
  const data = sessionViewSchema.parse(await context.controlPlane.getSession(context.ctx, parsed.data));
84
75
  return successResult({
85
76
  ...context,
86
77
  data,
78
+ org: parsed.data.org,
87
79
  env: parsed.data.env,
88
80
  summary: `${data.events.length} chronological event${data.events.length === 1 ? '' : 's'} in session ${data.sessionId}.`,
89
81
  nextActions: [
@@ -93,7 +85,7 @@ export async function getSession(context, input) {
93
85
  });
94
86
  }
95
87
  catch (error) {
96
- return portError(context, error, parsed.data.env);
88
+ return portError(context, error, parsed.data.org, parsed.data.env);
97
89
  }
98
90
  }
99
91
  //# sourceMappingURL=operations.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/tools/operations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/tools/rollback.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAIL,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AAEvB,UAAU,mBAAoB,SAAQ,aAAa;IACjD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;IA0DpF"}
1
+ {"version":3,"file":"rollback.d.ts","sourceRoot":"","sources":["../../src/tools/rollback.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,eAAe,CAAC;AAEvB,UAAU,mBAAoB,SAAQ,aAAa;IACjD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;CAC9C;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,OAAO;;;;;;;;;;;;;;;;IAqDpF"}
@@ -1,5 +1,5 @@
1
1
  import { rollbackDeploymentInputSchema, rollbackViewSchema, } from '../contracts.js';
2
- import { errorResult, forbiddenEnvironment, portError, successResult, validationError, } from '../results.js';
2
+ import { errorResult, portError, successResult, validationError, } from '../results.js';
3
3
  export async function rollbackDeployment(context, input) {
4
4
  if (!context.ctx.capabilities.includes('deployments:rollback')) {
5
5
  return errorResult({
@@ -9,8 +9,8 @@ export async function rollbackDeployment(context, input) {
9
9
  nextActions: [
10
10
  {
11
11
  kind: 'read_resource',
12
- label: 'Review the capabilities selected for this connection',
13
- resource: 'noodle://developer/capabilities/v1',
12
+ label: 'Review Developer MCP capabilities',
13
+ resource: 'noodle://developer/capabilities/v2',
14
14
  },
15
15
  ],
16
16
  });
@@ -19,24 +19,21 @@ export async function rollbackDeployment(context, input) {
19
19
  if (!parsed.success) {
20
20
  return validationError(context, 'Invalid rollback_deployment input.');
21
21
  }
22
- if (!context.ctx.environments.includes(parsed.data.env)) {
23
- return forbiddenEnvironment(context, parsed.data.env);
24
- }
25
22
  try {
26
23
  const data = rollbackViewSchema.parse(await context.controlPlane.rollbackDeployment(context.ctx, parsed.data));
27
- if (data.target.app !== parsed.data.app ||
28
- data.target.env !== parsed.data.env ||
29
- !context.ctx.environments.includes(data.target.env)) {
24
+ if (data.target.app !== parsed.data.app || data.target.env !== parsed.data.env) {
30
25
  return errorResult({
31
26
  ...context,
32
27
  code: 'internal_error',
33
28
  message: 'Noodle Cloud returned an out-of-scope rollback response.',
29
+ org: parsed.data.org,
34
30
  env: parsed.data.env,
35
31
  });
36
32
  }
37
33
  return successResult({
38
34
  ...context,
39
35
  data,
36
+ org: parsed.data.org,
40
37
  env: parsed.data.env,
41
38
  summary: data.rollback.alreadyActive
42
39
  ? `${data.rollback.serverName} deployment ${data.rollback.deploymentId} was already active.`
@@ -53,7 +50,7 @@ export async function rollbackDeployment(context, input) {
53
50
  });
54
51
  }
55
52
  catch (error) {
56
- return portError(context, error, parsed.data.env);
53
+ return portError(context, error, parsed.data.org, parsed.data.env);
57
54
  }
58
55
  }
59
56
  //# sourceMappingURL=rollback.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/tools/rollback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../src/tools/rollback.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,SAAS,EAET,aAAa,EACb,eAAe,GAChB,MAAM,eAAe,CAAC;AAMvB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA4B,EAAE,KAAc;IACnF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC/D,OAAO,WAAW,CAAe;YAC/B,GAAG,OAAO;YACV,IAAI,EAAE,oBAAoB;YAC1B,OAAO,EAAE,qDAAqD;YAC9D,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,eAAe;oBACrB,KAAK,EAAE,mCAAmC;oBAC1C,QAAQ,EAAE,oCAAoC;iBAC/C;aACF;SACF,CAAC,CAAC;IACL,CAAC;IACD,MAAM,MAAM,GAAG,6BAA6B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,eAAe,CAAe,OAAO,EAAE,oCAAoC,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CACnC,MAAM,OAAO,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CACxE,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/E,OAAO,WAAW,CAAe;gBAC/B,GAAG,OAAO;gBACV,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,0DAA0D;gBACnE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;gBACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;aACrB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,aAAa,CAAC;YACnB,GAAG,OAAO;YACV,IAAI;YACJ,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;YACpB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;YACpB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa;gBAClC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,eAAe,IAAI,CAAC,QAAQ,CAAC,YAAY,sBAAsB;gBAC5F,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,8BAA8B,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG;YAC1F,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,+BAA+B;oBACtC,IAAI,EAAE,oBAAoB;iBAC3B;gBACD,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,EAAE;gBACzE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,8BAA8B,EAAE,IAAI,EAAE,aAAa,EAAE;aAClF;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,SAAS,CAAe,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
@@ -1,35 +1,59 @@
1
1
  /**
2
- * Tenant search budget (ADR 0202 as amended): an org-pooled monthly ceiling on metered
3
- * retrieval (managed site-search queries), consumed pre-spend. On breach, retrieval is
4
- * blocked with an honest operator-visible state never silently degraded.
2
+ * Tenant search budget (ADR 0202 as amended): an org-pooled monthly ceiling with per-app
3
+ * sub-caps on metered retrieval (managed site-search queries), consumed pre-spend and
4
+ * atomically a refused request spends nothing at either granularity. On breach, retrieval
5
+ * is blocked with an honest operator-visible state — never silently degraded.
5
6
  *
6
7
  * Budgets bound *our* COGS, not the customer's model spend (admission limits own that), so
7
- * the window is a calendar month keyed by the billing org.
8
+ * the window is a calendar month keyed by the billing org, subdivided per app.
8
9
  */
10
+ export interface SearchBudgetScope {
11
+ readonly org: string;
12
+ readonly app: string;
13
+ }
14
+ export interface SearchBudgetCeilings {
15
+ /** Org-pooled monthly ceiling. Zero blocks all consumption (kill switch). */
16
+ readonly org: number;
17
+ /** Per-app monthly sub-cap. Zero blocks the app (kill switch). */
18
+ readonly app: number;
19
+ }
9
20
  export interface SearchBudgetState {
10
21
  readonly org: string;
22
+ readonly app: string;
11
23
  readonly year: number;
12
24
  readonly month: number;
13
- readonly consumed: number;
14
- readonly ceiling: number;
25
+ readonly orgConsumed: number;
26
+ readonly appConsumed: number;
27
+ readonly orgCeiling: number;
28
+ readonly appCeiling: number;
29
+ }
30
+ export interface SearchBudgetDecision {
31
+ /** False means the request was refused and nothing was spent at either granularity. */
32
+ readonly granted: boolean;
33
+ readonly state: SearchBudgetState;
15
34
  }
16
35
  export interface SearchBudgetStore {
17
- /**
18
- * Try to consume `count` queries against the org's monthly ceiling. Returns the state after
19
- * the attempt; `state.consumed > state.ceiling` means the request was refused and nothing
20
- * was spent.
21
- */
22
- consume(org: string, count: number, ceiling: number): Promise<SearchBudgetState>;
36
+ /** Try to consume `count` queries against both ceilings atomically. */
37
+ consume(scope: SearchBudgetScope, count: number, ceilings: SearchBudgetCeilings): Promise<SearchBudgetDecision>;
23
38
  /** Current month state without consuming. */
24
- peek(org: string, ceiling: number): Promise<SearchBudgetState>;
39
+ peek(scope: SearchBudgetScope, ceilings: SearchBudgetCeilings): Promise<SearchBudgetState>;
25
40
  }
41
+ export declare function budgetWindow(now: () => Date): {
42
+ year: number;
43
+ month: number;
44
+ };
26
45
  export declare class InMemorySearchBudgetStore implements SearchBudgetStore {
27
46
  private readonly counters;
28
- consume(org: string, count: number, ceiling: number): Promise<SearchBudgetState>;
29
- peek(org: string, ceiling: number): Promise<SearchBudgetState>;
30
- private key;
47
+ private readonly now;
48
+ constructor(now?: () => Date);
49
+ consume(scope: SearchBudgetScope, count: number, ceilings: SearchBudgetCeilings): Promise<SearchBudgetDecision>;
50
+ peek(scope: SearchBudgetScope, ceilings: SearchBudgetCeilings): Promise<SearchBudgetState>;
51
+ private counter;
52
+ private state;
53
+ private appKey;
54
+ private orgKey;
31
55
  }
32
- /** Thrown by callers when a budget state shows the ceiling was breached. */
56
+ /** Thrown by callers when a budget decision was refused. */
33
57
  export declare class SearchBudgetExhaustedError extends Error {
34
58
  readonly state: SearchBudgetState;
35
59
  constructor(state: SearchBudgetState);
@@ -1 +1 @@
1
- {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjF,6CAA6C;IAC7C,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChE;AAOD,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwE;IAE3F,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBhF,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUpE,OAAO,CAAC,GAAG;CAGZ;AAED,4EAA4E;AAC5E,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;gBAEtB,KAAK,EAAE,iBAAiB;CAOrC"}
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,uFAAuF;IACvF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,OAAO,CACL,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjC,6CAA6C;IAC7C,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC5F;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAG7E;AAED,qBAAa,yBAA0B,YAAW,iBAAiB;IACjE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwE;IACjG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;gBAErB,GAAG,GAAE,MAAM,IAAuB;IAIxC,OAAO,CACX,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAgB1B,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAWhG,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,KAAK;IAkBb,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;CAGf;AAED,4DAA4D;AAC5D,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;gBAEtB,KAAK,EAAE,iBAAiB;CASrC"}
@@ -1 +1 @@
1
- {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqBH,SAAS,MAAM;IACb,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,OAAO,yBAAyB;IACnB,QAAQ,GAAG,IAAI,GAAG,EAA6D,CAAC;IAEjG,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAa,EAAE,OAAe;QACvD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YAC5F,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC1F,IAAI,OAAO,CAAC,QAAQ,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;YACvC,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,OAAe;QACrC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,QAAQ,GACZ,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;YACrF,CAAC,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC,CAAC,CAAC;QACR,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAEO,GAAG,CAAC,GAAW;QACrB,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAC1C,KAAK,CAAoB;IAElC,YAAY,KAAwB;QAClC,KAAK,CACH,2CAA2C,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,GAAG,CAC5F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF"}
1
+ {"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export * from './ir.js';
20
20
  export * from './limits.js';
21
21
  export * from './manifest-schema.js';
22
22
  export * from './ports.js';
23
+ export * from './postgres-budget-store.js';
23
24
  export * from './postgres-revision-store.js';
24
25
  export * from './revision-store.js';
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
@@ -20,6 +20,7 @@ export * from './ir.js';
20
20
  export * from './limits.js';
21
21
  export * from './manifest-schema.js';
22
22
  export * from './ports.js';
23
+ export * from './postgres-budget-store.js';
23
24
  export * from './postgres-revision-store.js';
24
25
  export * from './revision-store.js';
25
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Durable search-budget store: Postgres parity for the org-pooled monthly ceiling with
3
+ * per-app sub-caps (ADR 0202 as amended). Consume is one transaction over two counter rows
4
+ * (the app row and the org-total row `app = ''`), locked in a fixed order, so concurrent
5
+ * requests can never over-grant and a refusal spends nothing at either granularity.
6
+ */
7
+ import type { Pool } from 'pg';
8
+ import { type SearchBudgetCeilings, type SearchBudgetDecision, type SearchBudgetScope, type SearchBudgetState, type SearchBudgetStore } from './budget.js';
9
+ export declare class PostgresSearchBudgetStore implements SearchBudgetStore {
10
+ #private;
11
+ constructor(pool: Pool, now?: () => Date);
12
+ ensureSchema(): Promise<void>;
13
+ consume(scope: SearchBudgetScope, count: number, ceilings: SearchBudgetCeilings): Promise<SearchBudgetDecision>;
14
+ peek(scope: SearchBudgetScope, ceilings: SearchBudgetCeilings): Promise<SearchBudgetState>;
15
+ /** Ensure the counter row exists, lock it, and return its consumed value. */
16
+ private lockCounter;
17
+ private addToCounter;
18
+ private state;
19
+ private orgKey;
20
+ private appKey;
21
+ }
22
+ //# sourceMappingURL=postgres-budget-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-budget-store.d.ts","sourceRoot":"","sources":["../src/postgres-budget-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAc,MAAM,IAAI,CAAC;AAC3C,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAKrB,qBAAa,yBAA0B,YAAW,iBAAiB;;gBAIrD,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAM,IAAuB;IAKpD,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7B,OAAO,CACX,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,oBAAoB,GAC7B,OAAO,CAAC,oBAAoB,CAAC;IAgC1B,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBhG,6EAA6E;YAC/D,WAAW;YAqBX,YAAY;IAc1B,OAAO,CAAC,KAAK;IAkBb,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;CAGf"}
@@ -0,0 +1,102 @@
1
+ import { budgetWindow, } from './budget.js';
2
+ /** The org-total row's app key; real app ids are never empty. */
3
+ const ORG_TOTAL_APP = '';
4
+ export class PostgresSearchBudgetStore {
5
+ #pool;
6
+ #now;
7
+ constructor(pool, now = () => new Date()) {
8
+ this.#pool = pool;
9
+ this.#now = now;
10
+ }
11
+ async ensureSchema() {
12
+ await this.#pool.query(`
13
+ CREATE TABLE IF NOT EXISTS knowledge_search_budgets (
14
+ org text NOT NULL,
15
+ app text NOT NULL,
16
+ year integer NOT NULL,
17
+ month integer NOT NULL,
18
+ consumed bigint NOT NULL DEFAULT 0,
19
+ PRIMARY KEY (org, app, year, month)
20
+ )
21
+ `);
22
+ }
23
+ async consume(scope, count, ceilings) {
24
+ const window = budgetWindow(this.#now);
25
+ if (ceilings.app <= 0 || ceilings.org <= 0) {
26
+ // Kill switch: block before touching the database.
27
+ const state = await this.peek(scope, ceilings);
28
+ return { granted: false, state };
29
+ }
30
+ const client = await this.#pool.connect();
31
+ try {
32
+ await client.query('BEGIN');
33
+ const appConsumed = await this.lockCounter(client, scope.org, scope.app, window);
34
+ const orgConsumed = await this.lockCounter(client, scope.org, ORG_TOTAL_APP, window);
35
+ const granted = appConsumed + count <= ceilings.app && orgConsumed + count <= ceilings.org;
36
+ if (granted) {
37
+ await this.addToCounter(client, scope.org, scope.app, window, count);
38
+ await this.addToCounter(client, scope.org, ORG_TOTAL_APP, window, count);
39
+ await client.query('COMMIT');
40
+ return {
41
+ granted,
42
+ state: this.state(scope, window, ceilings, orgConsumed + count, appConsumed + count),
43
+ };
44
+ }
45
+ await client.query('ROLLBACK');
46
+ return { granted, state: this.state(scope, window, ceilings, orgConsumed, appConsumed) };
47
+ }
48
+ catch (error) {
49
+ await client.query('ROLLBACK').catch(() => undefined);
50
+ throw error;
51
+ }
52
+ finally {
53
+ client.release();
54
+ }
55
+ }
56
+ async peek(scope, ceilings) {
57
+ const window = budgetWindow(this.#now);
58
+ const result = await this.#pool.query(`SELECT app, consumed FROM knowledge_search_budgets
59
+ WHERE org = $1 AND app IN ($2, $3) AND year = $4 AND month = $5`, [this.orgKey(scope), this.appKey(scope), ORG_TOTAL_APP, window.year, window.month]);
60
+ let orgConsumed = 0;
61
+ let appConsumed = 0;
62
+ for (const row of result.rows) {
63
+ if (row.app === ORG_TOTAL_APP)
64
+ orgConsumed = Number(row.consumed);
65
+ else
66
+ appConsumed = Number(row.consumed);
67
+ }
68
+ return this.state(scope, window, ceilings, orgConsumed, appConsumed);
69
+ }
70
+ /** Ensure the counter row exists, lock it, and return its consumed value. */
71
+ async lockCounter(client, org, app, window) {
72
+ await client.query(`INSERT INTO knowledge_search_budgets (org, app, year, month, consumed)
73
+ VALUES ($1, $2, $3, $4, 0)
74
+ ON CONFLICT (org, app, year, month) DO NOTHING`, [org.toLowerCase(), app.toLowerCase(), window.year, window.month]);
75
+ const locked = await client.query(`SELECT consumed FROM knowledge_search_budgets
76
+ WHERE org = $1 AND app = $2 AND year = $3 AND month = $4
77
+ FOR UPDATE`, [org.toLowerCase(), app.toLowerCase(), window.year, window.month]);
78
+ return Number(locked.rows[0]?.consumed ?? 0);
79
+ }
80
+ async addToCounter(client, org, app, window, count) {
81
+ await client.query(`UPDATE knowledge_search_budgets SET consumed = consumed + $5
82
+ WHERE org = $1 AND app = $2 AND year = $3 AND month = $4`, [org.toLowerCase(), app.toLowerCase(), window.year, window.month, count]);
83
+ }
84
+ state(scope, window, ceilings, orgConsumed, appConsumed) {
85
+ return {
86
+ org: scope.org,
87
+ app: scope.app,
88
+ ...window,
89
+ orgConsumed,
90
+ appConsumed,
91
+ orgCeiling: ceilings.org,
92
+ appCeiling: ceilings.app,
93
+ };
94
+ }
95
+ orgKey(scope) {
96
+ return scope.org.toLowerCase();
97
+ }
98
+ appKey(scope) {
99
+ return scope.app.toLowerCase();
100
+ }
101
+ }
102
+ //# sourceMappingURL=postgres-budget-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-budget-store.js","sourceRoot":"","sources":["../src/postgres-budget-store.ts"],"names":[],"mappings":"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"}
@@ -11,11 +11,11 @@
11
11
  */
12
12
  import type { Pool } from 'pg';
13
13
  import type { KnowledgeScope } from './ir.js';
14
- import { type KnowledgeRevision } from './ports.js';
15
- import type { KnowledgeRevisionStore, LeaseTicket, RevisionRecord, StageRevisionInput } from './revision-store.js';
14
+ import { type KnowledgeRevision, type StagedDocument } from './ports.js';
15
+ import { type DocumentTextCodec, type KnowledgeRevisionStore, type LeaseTicket, type RevisionRecord, type StageRevisionInput } from './revision-store.js';
16
16
  export declare class PostgresKnowledgeRevisionStore implements KnowledgeRevisionStore {
17
17
  #private;
18
- constructor(pool: Pool);
18
+ constructor(pool: Pool, codec?: DocumentTextCodec);
19
19
  ensureSchema(): Promise<void>;
20
20
  stage(input: StageRevisionInput): Promise<KnowledgeRevision>;
21
21
  acquireLease(scope: KnowledgeScope, componentName: string, holder: string): Promise<LeaseTicket>;
@@ -27,6 +27,8 @@ export declare class PostgresKnowledgeRevisionStore implements KnowledgeRevision
27
27
  active(scope: KnowledgeScope, componentName: string): Promise<KnowledgeRevision | undefined>;
28
28
  record(revisionId: string): Promise<RevisionRecord | undefined>;
29
29
  delete(revisionId: string): Promise<void>;
30
+ stageDocuments(revisionId: string, documents: readonly StagedDocument[]): Promise<void>;
31
+ documents(revisionId: string): Promise<readonly StagedDocument[]>;
30
32
  private rowScope;
31
33
  private toRevision;
32
34
  }