arc-1 0.9.18 → 0.9.20

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 (149) hide show
  1. package/README.md +33 -30
  2. package/dist/adt/config.d.ts +1 -1
  3. package/dist/adt/config.d.ts.map +1 -1
  4. package/dist/adt/errors.d.ts.map +1 -1
  5. package/dist/adt/errors.js +186 -25
  6. package/dist/adt/errors.js.map +1 -1
  7. package/dist/adt/http.d.ts +1 -1
  8. package/dist/adt/http.d.ts.map +1 -1
  9. package/dist/adt/http.js.map +1 -1
  10. package/dist/authz/policy.d.ts +6 -0
  11. package/dist/authz/policy.d.ts.map +1 -1
  12. package/dist/authz/policy.js +20 -0
  13. package/dist/authz/policy.js.map +1 -1
  14. package/dist/cache/cache.d.ts +25 -0
  15. package/dist/cache/cache.d.ts.map +1 -1
  16. package/dist/cache/cache.js.map +1 -1
  17. package/dist/cache/caching-layer.d.ts +31 -2
  18. package/dist/cache/caching-layer.d.ts.map +1 -1
  19. package/dist/cache/caching-layer.js +102 -2
  20. package/dist/cache/caching-layer.js.map +1 -1
  21. package/dist/cache/memory.d.ts +2 -1
  22. package/dist/cache/memory.d.ts.map +1 -1
  23. package/dist/cache/memory.js +46 -0
  24. package/dist/cache/memory.js.map +1 -1
  25. package/dist/cache/sqlite.d.ts +2 -1
  26. package/dist/cache/sqlite.d.ts.map +1 -1
  27. package/dist/cache/sqlite.js +54 -0
  28. package/dist/cache/sqlite.js.map +1 -1
  29. package/dist/cli.js +21 -3
  30. package/dist/cli.js.map +1 -1
  31. package/dist/handlers/context.d.ts.map +1 -1
  32. package/dist/handlers/context.js +27 -4
  33. package/dist/handlers/context.js.map +1 -1
  34. package/dist/handlers/dispatch.d.ts +3 -0
  35. package/dist/handlers/dispatch.d.ts.map +1 -1
  36. package/dist/handlers/dispatch.js +71 -53
  37. package/dist/handlers/dispatch.js.map +1 -1
  38. package/dist/handlers/object-types.d.ts +1 -1
  39. package/dist/handlers/object-types.d.ts.map +1 -1
  40. package/dist/handlers/object-types.js +10 -2
  41. package/dist/handlers/object-types.js.map +1 -1
  42. package/dist/handlers/read.d.ts.map +1 -1
  43. package/dist/handlers/read.js +4 -1
  44. package/dist/handlers/read.js.map +1 -1
  45. package/dist/handlers/schemas.d.ts +8 -0
  46. package/dist/handlers/schemas.d.ts.map +1 -1
  47. package/dist/handlers/schemas.js +2 -0
  48. package/dist/handlers/schemas.js.map +1 -1
  49. package/dist/handlers/tool-registry.d.ts +4 -4
  50. package/dist/handlers/tool-registry.d.ts.map +1 -1
  51. package/dist/handlers/tool-registry.js +4 -0
  52. package/dist/handlers/tool-registry.js.map +1 -1
  53. package/dist/handlers/tools.d.ts.map +1 -1
  54. package/dist/handlers/tools.js +29 -23
  55. package/dist/handlers/tools.js.map +1 -1
  56. package/dist/handlers/write/create.d.ts.map +1 -1
  57. package/dist/handlers/write/create.js +89 -4
  58. package/dist/handlers/write/create.js.map +1 -1
  59. package/dist/plugins/manifest-interpreter.d.ts +25 -0
  60. package/dist/plugins/manifest-interpreter.d.ts.map +1 -0
  61. package/dist/plugins/manifest-interpreter.js +126 -0
  62. package/dist/plugins/manifest-interpreter.js.map +1 -0
  63. package/dist/public/define-tool.d.ts +9 -0
  64. package/dist/public/define-tool.d.ts.map +1 -0
  65. package/dist/public/define-tool.js +25 -0
  66. package/dist/public/define-tool.js.map +1 -0
  67. package/dist/public/index.d.ts +9 -0
  68. package/dist/public/index.d.ts.map +1 -0
  69. package/dist/public/index.js +10 -0
  70. package/dist/public/index.js.map +1 -0
  71. package/dist/public/testing.d.ts +27 -0
  72. package/dist/public/testing.d.ts.map +1 -0
  73. package/dist/public/testing.js +52 -0
  74. package/dist/public/testing.js.map +1 -0
  75. package/dist/public/types.d.ts +87 -0
  76. package/dist/public/types.d.ts.map +1 -0
  77. package/dist/public/types.js +4 -0
  78. package/dist/public/types.js.map +1 -0
  79. package/dist/public/ui/app.js +1044 -0
  80. package/dist/public/ui/arc-mark.svg +5 -0
  81. package/dist/public/ui/index.html +43 -0
  82. package/dist/public/ui/styles.css +563 -0
  83. package/dist/registry/tool-registry.d.ts +74 -0
  84. package/dist/registry/tool-registry.d.ts.map +1 -0
  85. package/dist/registry/tool-registry.js +59 -0
  86. package/dist/registry/tool-registry.js.map +1 -0
  87. package/dist/server/app-url.d.ts +31 -0
  88. package/dist/server/app-url.d.ts.map +1 -0
  89. package/dist/server/app-url.js +50 -0
  90. package/dist/server/app-url.js.map +1 -0
  91. package/dist/server/audit.d.ts +4 -0
  92. package/dist/server/audit.d.ts.map +1 -1
  93. package/dist/server/audit.js.map +1 -1
  94. package/dist/server/config.d.ts.map +1 -1
  95. package/dist/server/config.js +92 -0
  96. package/dist/server/config.js.map +1 -1
  97. package/dist/server/http.d.ts +17 -47
  98. package/dist/server/http.d.ts.map +1 -1
  99. package/dist/server/http.js +127 -376
  100. package/dist/server/http.js.map +1 -1
  101. package/dist/server/logger.d.ts +22 -0
  102. package/dist/server/logger.d.ts.map +1 -1
  103. package/dist/server/logger.js +22 -0
  104. package/dist/server/logger.js.map +1 -1
  105. package/dist/server/plugin-loader.d.ts +19 -0
  106. package/dist/server/plugin-loader.d.ts.map +1 -0
  107. package/dist/server/plugin-loader.js +162 -0
  108. package/dist/server/plugin-loader.js.map +1 -0
  109. package/dist/server/safe-http-client.d.ts +44 -0
  110. package/dist/server/safe-http-client.d.ts.map +1 -0
  111. package/dist/server/safe-http-client.js +198 -0
  112. package/dist/server/safe-http-client.js.map +1 -0
  113. package/dist/server/server.d.ts +2 -2
  114. package/dist/server/server.d.ts.map +1 -1
  115. package/dist/server/server.js +63 -9
  116. package/dist/server/server.js.map +1 -1
  117. package/dist/server/types.d.ts +24 -0
  118. package/dist/server/types.d.ts.map +1 -1
  119. package/dist/server/types.js +6 -0
  120. package/dist/server/types.js.map +1 -1
  121. package/dist/server/ui-log-buffer.d.ts +29 -0
  122. package/dist/server/ui-log-buffer.d.ts.map +1 -0
  123. package/dist/server/ui-log-buffer.js +72 -0
  124. package/dist/server/ui-log-buffer.js.map +1 -0
  125. package/dist/server/ui-state.d.ts +32 -0
  126. package/dist/server/ui-state.d.ts.map +1 -0
  127. package/dist/server/ui-state.js +230 -0
  128. package/dist/server/ui-state.js.map +1 -0
  129. package/dist/server/ui.d.ts +20 -0
  130. package/dist/server/ui.d.ts.map +1 -0
  131. package/dist/server/ui.js +275 -0
  132. package/dist/server/ui.js.map +1 -0
  133. package/package.json +34 -14
  134. package/dist/adt/btp.d.ts +0 -140
  135. package/dist/adt/btp.d.ts.map +0 -1
  136. package/dist/adt/btp.js +0 -427
  137. package/dist/adt/btp.js.map +0 -1
  138. package/dist/server/oauth-state.d.ts +0 -92
  139. package/dist/server/oauth-state.d.ts.map +0 -1
  140. package/dist/server/oauth-state.js +0 -163
  141. package/dist/server/oauth-state.js.map +0 -1
  142. package/dist/server/stateless-client-store.d.ts +0 -173
  143. package/dist/server/stateless-client-store.d.ts.map +0 -1
  144. package/dist/server/stateless-client-store.js +0 -503
  145. package/dist/server/stateless-client-store.js.map +0 -1
  146. package/dist/server/xsuaa.d.ts +0 -188
  147. package/dist/server/xsuaa.d.ts.map +0 -1
  148. package/dist/server/xsuaa.js +0 -464
  149. package/dist/server/xsuaa.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ export { AdtApiError, AdtNetworkError, AdtSafetyError } from '../adt/errors.js';
2
+ export type { AdtResponse } from '../adt/http.js';
3
+ export { OperationType, type OperationTypeCode } from '../adt/safety.js';
4
+ export type { Scope } from '../authz/policy.js';
5
+ export type { ToolResult } from '../registry/tool-registry.js';
6
+ export type { SafeHttpClient } from '../server/safe-http-client.js';
7
+ export { defineTool } from './define-tool.js';
8
+ export type { ElicitOutcome, Plugin, PluginLogger, PluginToolDefinition, ReadOnlyAdtClient, ToolContext, } from './types.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,YAAY,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,MAAM,EACN,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,GACZ,MAAM,YAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ // `arc-1/public` — the @experimental extension API surface.
2
+ //
3
+ // Stability: this API may break in ANY release. A plugin declares `apiVersion` (a single integer
4
+ // fuse); the loader rejects a mismatch. No semver guarantee until the feature graduates.
5
+ // See docs/research/extension-framework-spec.md §2.
6
+ export { AdtApiError, AdtNetworkError, AdtSafetyError } from '../adt/errors.js';
7
+ // Re-exported building blocks (stable shapes plugins reference):
8
+ export { OperationType } from '../adt/safety.js';
9
+ export { defineTool } from './define-tool.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/public/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,iGAAiG;AACjG,yFAAyF;AACzF,oDAAoD;AAEpD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGhF,iEAAiE;AACjE,OAAO,EAAE,aAAa,EAA0B,MAAM,kBAAkB,CAAC;AAIzE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { ToolContext } from './types.js';
2
+ export interface MockHttpCall {
3
+ method: 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE';
4
+ path: string;
5
+ body?: string;
6
+ }
7
+ export interface MockToolContext extends ToolContext {
8
+ /** Every `ctx.http` call the handler made, in order. */
9
+ httpCalls: MockHttpCall[];
10
+ /** Every class name passed to `ctx.run.classRun`, in order. */
11
+ classRunCalls: string[];
12
+ }
13
+ export interface MockToolContextOptions {
14
+ /** Body returned by every `ctx.http` call (unless overridden per-path by `responses`). */
15
+ responseBody?: string;
16
+ /** Per-path response bodies; falls back to `responseBody` then ''. */
17
+ responses?: Record<string, string>;
18
+ /** Scopes on `ctx.authInfo` (default `['read']`). */
19
+ scopes?: string[];
20
+ requestId?: string;
21
+ /** Partial `ctx.client` for handlers that call high-level read methods. */
22
+ client?: Partial<ToolContext['client']>;
23
+ /** Console output returned by `ctx.run.classRun` (default ''). The mock never gates. */
24
+ classRunOutput?: string;
25
+ }
26
+ export declare function createMockToolContext(options?: MockToolContextOptions): MockToolContext;
27
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/public/testing.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,wDAAwD;IACxD,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,+DAA+D;IAC/D,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxC,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAgD3F"}
@@ -0,0 +1,52 @@
1
+ // arc-1/public/testing — helpers for unit-testing a plugin tool with no live SAP. @experimental.
2
+ //
3
+ // `createMockToolContext` returns a ToolContext whose `http` records every call and returns a
4
+ // configurable body, so a plugin author can assert "my handler GETs /sap/bc/adt/… and shapes the
5
+ // response like X" without a server. See docs/research/extension-framework-spec.md §2/§12.
6
+ export function createMockToolContext(options = {}) {
7
+ const httpCalls = [];
8
+ const bodyFor = (path) => options.responses?.[path] ?? options.responseBody ?? '';
9
+ const resp = (path) => ({ statusCode: 200, headers: {}, body: bodyFor(path) });
10
+ // A pure recorder — never gates (the gate is unit-tested against the real createSafeHttpClient).
11
+ const http = {
12
+ get: async (path) => {
13
+ httpCalls.push({ method: 'GET', path });
14
+ return resp(path);
15
+ },
16
+ head: async (path) => {
17
+ httpCalls.push({ method: 'HEAD', path });
18
+ return resp(path);
19
+ },
20
+ post: async (path, body) => {
21
+ httpCalls.push({ method: 'POST', path, body });
22
+ return resp(path);
23
+ },
24
+ put: async (path, body) => {
25
+ httpCalls.push({ method: 'PUT', path, body });
26
+ return resp(path);
27
+ },
28
+ delete: async (path) => {
29
+ httpCalls.push({ method: 'DELETE', path });
30
+ return resp(path);
31
+ },
32
+ };
33
+ const classRunCalls = [];
34
+ const run = {
35
+ classRun: async (className) => {
36
+ classRunCalls.push(className);
37
+ return options.classRunOutput ?? '';
38
+ },
39
+ };
40
+ const ctx = {
41
+ client: (options.client ?? {}),
42
+ http,
43
+ run,
44
+ logger: { info: () => { }, warn: () => { }, error: () => { } },
45
+ authInfo: { userName: 'test-user', scopes: options.scopes ?? ['read'], clientId: 'test' },
46
+ requestId: options.requestId ?? 'test-request',
47
+ httpCalls,
48
+ classRunCalls,
49
+ };
50
+ return ctx;
51
+ }
52
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../../src/public/testing.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,EAAE;AACF,8FAA8F;AAC9F,iGAAiG;AACjG,2FAA2F;AAiC3F,MAAM,UAAU,qBAAqB,CAAC,UAAkC,EAAE;IACxE,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC;IAClG,MAAM,IAAI,GAAG,CAAC,IAAY,EAAe,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEpG,iGAAiG;IACjG,MAAM,IAAI,GAAmB;QAC3B,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAClB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACnB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACzB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;YACxB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;KACF,CAAC;IAEF,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,MAAM,GAAG,GAAuB;QAC9B,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAC5B,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,OAAO,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACtC,CAAC;KACF,CAAC;IAEF,MAAM,GAAG,GAAoB;QAC3B,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAqC;QAClE,IAAI;QACJ,GAAG;QACH,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE;QAC3D,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;QACzF,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,cAAc;QAC9C,SAAS;QACT,aAAa;KACd,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,87 @@
1
+ import type { ZodTypeAny } from 'zod';
2
+ import type { AdtClient } from '../adt/client.js';
3
+ import type { OperationTypeCode } from '../adt/safety.js';
4
+ import type { Scope } from '../authz/policy.js';
5
+ import type { ToolResult } from '../registry/tool-registry.js';
6
+ import type { SafeHttpClient } from '../server/safe-http-client.js';
7
+ export type { SafeHttpClient, Scope, ToolResult };
8
+ /**
9
+ * `AdtClient` narrowed to its safe **plain-read** facade. Omits (review B1 + post-merge review):
10
+ * - `http` — the raw, UNGATED AdtHttpClient (all HTTP must go through `ctx.http`)
11
+ * - `safety`/`withSafety` — the safety ref + the escalation hatch
12
+ * - the package-hierarchy cache mutators
13
+ * - `getTableContents`/`runQuery`/`runTableQuery` — the **scope-escalating** reads (they gate on
14
+ * `data`/`sql`, not `read`); a `read`-declared plugin must not reach them. v1 plugins have no
15
+ * data/SQL surface; a scoped `ctx.data`/`ctx.sql` facade is a v2 item.
16
+ * Every retained method gates on `read` via `checkOperation`, so exposing them is safe. Enforced at
17
+ * RUNTIME too — see `createReadOnlyAdtClient` (the type Omit alone is not a security boundary).
18
+ */
19
+ export type ReadOnlyAdtClient = Omit<AdtClient, 'http' | 'safety' | 'withSafety' | 'getPackageHierarchyResolver' | 'invalidatePackageHierarchy' | 'getTableContents' | 'runQuery' | 'runTableQuery'>;
20
+ /**
21
+ * Named, privileged operations a plugin can invoke (e.g. executing a console class). Each op is
22
+ * gated server-side; calling one when its gate is closed throws `AdtSafetyError`.
23
+ */
24
+ export interface PluginRunOps {
25
+ /**
26
+ * Run an ABAP **console class** (one implementing `IF_OO_ADT_CLASSRUN`) and return its console
27
+ * output (`out->write( … )`) as plain text. Wraps `POST /sap/bc/adt/oo/classrun/{class}`.
28
+ *
29
+ * Gated (all must hold): the server opt-in `SAP_ALLOW_PLUGIN_EXECUTE=true`, `SAP_ALLOW_WRITES=true`
30
+ * (executing ABAP is a mutation vector), and the calling tool must declare `write` scope. SAP-side
31
+ * the user still needs execute authorization. The class name is validated (no path injection).
32
+ */
33
+ classRun(className: string): Promise<string>;
34
+ }
35
+ /** Minimal structured logger handed to plugins (stderr only — never `console.log`). */
36
+ export interface PluginLogger {
37
+ info(message: string, data?: unknown): void;
38
+ warn(message: string, data?: unknown): void;
39
+ error(message: string, data?: unknown): void;
40
+ }
41
+ /** Per-call context a plugin tool receives. Built fresh per request (never bound at registration). */
42
+ export interface ToolContext {
43
+ readonly client: ReadOnlyAdtClient;
44
+ readonly http: SafeHttpClient;
45
+ readonly run: PluginRunOps;
46
+ readonly logger: PluginLogger;
47
+ readonly authInfo?: {
48
+ userName?: string;
49
+ scopes: string[];
50
+ clientId?: string;
51
+ };
52
+ readonly requestId: string;
53
+ /** Ask the user for input mid-tool (elicitation). `requestedSchema` defaults to a confirm. */
54
+ readonly elicit?: (message: string, requestedSchema?: Record<string, unknown>) => Promise<ElicitOutcome>;
55
+ /** Send a client-visible progress/log line (distinct from the stderr `logger`). */
56
+ readonly notify?: (level: 'info' | 'warning' | 'error', message: string) => Promise<void>;
57
+ /** Ask the LLM a sub-question (sampling). Returns the text answer. */
58
+ readonly sampling?: (systemPrompt: string, userMessage: string, maxTokens?: number) => Promise<string>;
59
+ }
60
+ /** The outcome of `ctx.elicit` — the MCP elicitation result. */
61
+ export interface ElicitOutcome {
62
+ action: 'accept' | 'decline' | 'cancel';
63
+ content?: Record<string, unknown>;
64
+ }
65
+ /** A plugin tool definition (code tier). Named to avoid colliding with the internal MCP ToolDefinition. */
66
+ export interface PluginToolDefinition {
67
+ readonly name: `Custom_${string}`;
68
+ readonly description: string;
69
+ readonly schema: ZodTypeAny;
70
+ readonly policy: {
71
+ scope: Scope;
72
+ opType: OperationTypeCode;
73
+ };
74
+ /** System-type visibility, enforced in `tools/list`: a non-`all` tool is hidden when the resolved
75
+ * system type is known and differs (e.g. `btp` tool on an on-prem system). Default `all`. */
76
+ readonly availableOn?: 'all' | 'onprem' | 'btp';
77
+ handler(args: unknown, ctx: ToolContext): Promise<ToolResult>;
78
+ }
79
+ /** The default export shape of an `ARC1_PLUGINS` code plugin. */
80
+ export interface Plugin {
81
+ readonly name: string;
82
+ readonly version: string;
83
+ readonly apiVersion: number;
84
+ readonly tools: PluginToolDefinition[];
85
+ readonly manifests?: string[];
86
+ }
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/public/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ // Public extension API types (@experimental — may break in any release; gated by `apiVersion`).
2
+ // See docs/research/extension-framework-spec.md §2.
3
+ export {};
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/public/types.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,oDAAoD"}