@corenel/harness 0.1.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 (149) hide show
  1. package/dist/compression.d.ts +11 -0
  2. package/dist/compression.d.ts.map +1 -0
  3. package/dist/compression.js +27 -0
  4. package/dist/compression.js.map +1 -0
  5. package/dist/conversation.d.ts +29 -0
  6. package/dist/conversation.d.ts.map +1 -0
  7. package/dist/conversation.js +25 -0
  8. package/dist/conversation.js.map +1 -0
  9. package/dist/core/loop.d.ts +31 -0
  10. package/dist/core/loop.d.ts.map +1 -0
  11. package/dist/core/loop.js +237 -0
  12. package/dist/core/loop.js.map +1 -0
  13. package/dist/dag/executeNode.d.ts +41 -0
  14. package/dist/dag/executeNode.d.ts.map +1 -0
  15. package/dist/dag/executeNode.js +81 -0
  16. package/dist/dag/executeNode.js.map +1 -0
  17. package/dist/fileSchema.d.ts +7 -0
  18. package/dist/fileSchema.d.ts.map +1 -0
  19. package/dist/fileSchema.js +40 -0
  20. package/dist/fileSchema.js.map +1 -0
  21. package/dist/guardrail/builtins.d.ts +9 -0
  22. package/dist/guardrail/builtins.d.ts.map +1 -0
  23. package/dist/guardrail/builtins.js +61 -0
  24. package/dist/guardrail/builtins.js.map +1 -0
  25. package/dist/guardrail/glob.d.ts +3 -0
  26. package/dist/guardrail/glob.d.ts.map +1 -0
  27. package/dist/guardrail/glob.js +33 -0
  28. package/dist/guardrail/glob.js.map +1 -0
  29. package/dist/guardrail/guardrail.d.ts +25 -0
  30. package/dist/guardrail/guardrail.d.ts.map +1 -0
  31. package/dist/guardrail/guardrail.js +67 -0
  32. package/dist/guardrail/guardrail.js.map +1 -0
  33. package/dist/guardrail/index.d.ts +9 -0
  34. package/dist/guardrail/index.d.ts.map +1 -0
  35. package/dist/guardrail/index.js +11 -0
  36. package/dist/guardrail/index.js.map +1 -0
  37. package/dist/guardrail/permission-service.d.ts +53 -0
  38. package/dist/guardrail/permission-service.d.ts.map +1 -0
  39. package/dist/guardrail/permission-service.js +147 -0
  40. package/dist/guardrail/permission-service.js.map +1 -0
  41. package/dist/guardrail/serialize.d.ts +9 -0
  42. package/dist/guardrail/serialize.d.ts.map +1 -0
  43. package/dist/guardrail/serialize.js +53 -0
  44. package/dist/guardrail/serialize.js.map +1 -0
  45. package/dist/guardrail/store.d.ts +26 -0
  46. package/dist/guardrail/store.d.ts.map +1 -0
  47. package/dist/guardrail/store.js +109 -0
  48. package/dist/guardrail/store.js.map +1 -0
  49. package/dist/guardrail/validate.d.ts +8 -0
  50. package/dist/guardrail/validate.d.ts.map +1 -0
  51. package/dist/guardrail/validate.js +105 -0
  52. package/dist/guardrail/validate.js.map +1 -0
  53. package/dist/guards.d.ts +37 -0
  54. package/dist/guards.d.ts.map +1 -0
  55. package/dist/guards.js +45 -0
  56. package/dist/guards.js.map +1 -0
  57. package/dist/log.d.ts +4 -0
  58. package/dist/log.d.ts.map +1 -0
  59. package/dist/log.js +22 -0
  60. package/dist/log.js.map +1 -0
  61. package/dist/promptCompiler.d.ts +18 -0
  62. package/dist/promptCompiler.d.ts.map +1 -0
  63. package/dist/promptCompiler.js +11 -0
  64. package/dist/promptCompiler.js.map +1 -0
  65. package/dist/prompts/config.d.ts +63 -0
  66. package/dist/prompts/config.d.ts.map +1 -0
  67. package/dist/prompts/config.js +268 -0
  68. package/dist/prompts/config.js.map +1 -0
  69. package/dist/prompts/host.d.ts +30 -0
  70. package/dist/prompts/host.d.ts.map +1 -0
  71. package/dist/prompts/host.js +11 -0
  72. package/dist/prompts/host.js.map +1 -0
  73. package/dist/prompts/index.d.ts +50 -0
  74. package/dist/prompts/index.d.ts.map +1 -0
  75. package/dist/prompts/index.js +105 -0
  76. package/dist/prompts/index.js.map +1 -0
  77. package/dist/prompts/library/defaults.generated.d.ts +2 -0
  78. package/dist/prompts/library/defaults.generated.d.ts.map +1 -0
  79. package/dist/prompts/library/defaults.generated.js +31 -0
  80. package/dist/prompts/library/defaults.generated.js.map +1 -0
  81. package/dist/prompts/library/index.d.ts +8 -0
  82. package/dist/prompts/library/index.d.ts.map +1 -0
  83. package/dist/prompts/library/index.js +28 -0
  84. package/dist/prompts/library/index.js.map +1 -0
  85. package/dist/providers/gateway.d.ts +58 -0
  86. package/dist/providers/gateway.d.ts.map +1 -0
  87. package/dist/providers/gateway.js +145 -0
  88. package/dist/providers/gateway.js.map +1 -0
  89. package/dist/services.d.ts +29 -0
  90. package/dist/services.d.ts.map +1 -0
  91. package/dist/services.js +22 -0
  92. package/dist/services.js.map +1 -0
  93. package/dist/sidecar/host.d.ts +69 -0
  94. package/dist/sidecar/host.d.ts.map +1 -0
  95. package/dist/sidecar/host.js +228 -0
  96. package/dist/sidecar/host.js.map +1 -0
  97. package/dist/sidecar/server.d.ts +42 -0
  98. package/dist/sidecar/server.d.ts.map +1 -0
  99. package/dist/sidecar/server.js +267 -0
  100. package/dist/sidecar/server.js.map +1 -0
  101. package/dist/skills.d.ts +39 -0
  102. package/dist/skills.d.ts.map +1 -0
  103. package/dist/skills.js +216 -0
  104. package/dist/skills.js.map +1 -0
  105. package/dist/systemParts.d.ts +10 -0
  106. package/dist/systemParts.d.ts.map +1 -0
  107. package/dist/systemParts.js +21 -0
  108. package/dist/systemParts.js.map +1 -0
  109. package/dist/todos.d.ts +34 -0
  110. package/dist/todos.d.ts.map +1 -0
  111. package/dist/todos.js +112 -0
  112. package/dist/todos.js.map +1 -0
  113. package/dist/tools/builtins.d.ts +20 -0
  114. package/dist/tools/builtins.d.ts.map +1 -0
  115. package/dist/tools/builtins.js +335 -0
  116. package/dist/tools/builtins.js.map +1 -0
  117. package/dist/tools/files.d.ts +11 -0
  118. package/dist/tools/files.d.ts.map +1 -0
  119. package/dist/tools/files.js +161 -0
  120. package/dist/tools/files.js.map +1 -0
  121. package/dist/tools/http.d.ts +3 -0
  122. package/dist/tools/http.d.ts.map +1 -0
  123. package/dist/tools/http.js +71 -0
  124. package/dist/tools/http.js.map +1 -0
  125. package/dist/tools/namespaces.d.ts +27 -0
  126. package/dist/tools/namespaces.d.ts.map +1 -0
  127. package/dist/tools/namespaces.js +83 -0
  128. package/dist/tools/namespaces.js.map +1 -0
  129. package/dist/tools/registry.d.ts +8 -0
  130. package/dist/tools/registry.d.ts.map +1 -0
  131. package/dist/tools/registry.js +14 -0
  132. package/dist/tools/registry.js.map +1 -0
  133. package/dist/tools/sessions.d.ts +3 -0
  134. package/dist/tools/sessions.d.ts.map +1 -0
  135. package/dist/tools/sessions.js +149 -0
  136. package/dist/tools/sessions.js.map +1 -0
  137. package/dist/tools/todo.d.ts +3 -0
  138. package/dist/tools/todo.d.ts.map +1 -0
  139. package/dist/tools/todo.js +38 -0
  140. package/dist/tools/todo.js.map +1 -0
  141. package/dist/tools/urlGuard.d.ts +9 -0
  142. package/dist/tools/urlGuard.d.ts.map +1 -0
  143. package/dist/tools/urlGuard.js +80 -0
  144. package/dist/tools/urlGuard.js.map +1 -0
  145. package/dist/tools/web.d.ts +3 -0
  146. package/dist/tools/web.d.ts.map +1 -0
  147. package/dist/tools/web.js +35 -0
  148. package/dist/tools/web.js.map +1 -0
  149. package/package.json +55 -0
@@ -0,0 +1,109 @@
1
+ import { BUILTIN_POLICIES, STANDARD_POLICY } from './builtins';
2
+ import { validatePolicy } from './validate';
3
+ const LS_CUSTOM = 'prompd.web.agent.policies.v1';
4
+ const LS_SELECTED = 'prompd.web.agent.policy';
5
+ /** The stored map verbatim (null-prototype so policy names like "__proto__"
6
+ * can't reach Object.prototype slots), WITHOUT dropping entries that fail
7
+ * validation — so a write never erases a sibling this build can't parse (e.g.
8
+ * a policy authored by a newer schema). Used for read-modify-write. */
9
+ function readRaw() {
10
+ const out = Object.create(null);
11
+ try {
12
+ const raw = localStorage.getItem(LS_CUSTOM);
13
+ const obj = raw ? JSON.parse(raw) : {};
14
+ if (obj && typeof obj === 'object') {
15
+ for (const k of Object.keys(obj))
16
+ out[k] = obj[k];
17
+ }
18
+ }
19
+ catch { /* corrupt blob — start empty */ }
20
+ return out;
21
+ }
22
+ /** Only the entries that validate cleanly, for USE (listing/resolving). Invalid
23
+ * entries are hidden but left on disk (readRaw keeps them). */
24
+ function readCustom() {
25
+ const out = Object.create(null);
26
+ const raw = readRaw();
27
+ for (const k of Object.keys(raw)) {
28
+ const r = validatePolicy(raw[k]);
29
+ if (r.ok && r.policy)
30
+ out[k] = r.policy;
31
+ }
32
+ return out;
33
+ }
34
+ function writeRaw(map) {
35
+ try {
36
+ localStorage.setItem(LS_CUSTOM, JSON.stringify(map));
37
+ }
38
+ catch { /* ignore quota */ }
39
+ }
40
+ export function isBuiltinPolicy(name) {
41
+ return Object.prototype.hasOwnProperty.call(BUILTIN_POLICIES, name);
42
+ }
43
+ /** Built-ins (in declared order) followed by custom policies (alphabetical). */
44
+ export function listPolicies() {
45
+ const builtins = Object.keys(BUILTIN_POLICIES).map((name) => ({
46
+ name, policy: BUILTIN_POLICIES[name], builtin: true,
47
+ }));
48
+ const custom = readCustom();
49
+ const customs = Object.keys(custom)
50
+ .filter((name) => !isBuiltinPolicy(name))
51
+ .sort()
52
+ .map((name) => ({ name, policy: custom[name], builtin: false }));
53
+ return [...builtins, ...customs];
54
+ }
55
+ /** Resolve a policy by name. Built-ins win; falls back to a stored custom. */
56
+ export function getPolicy(name) {
57
+ if (isBuiltinPolicy(name))
58
+ return BUILTIN_POLICIES[name];
59
+ return readCustom()[name];
60
+ }
61
+ /** Persist a custom policy. Rejects built-in names (rename to save a copy) and
62
+ * any policy that fails validation. */
63
+ export function saveCustomPolicy(p) {
64
+ const r = validatePolicy(p);
65
+ if (!r.ok || !r.policy)
66
+ return { ok: false, errors: r.errors };
67
+ if (isBuiltinPolicy(r.policy.name)) {
68
+ return { ok: false, errors: [`"${r.policy.name}" is a built-in policy — rename to save a custom copy.`] };
69
+ }
70
+ // Read-modify-write the RAW map so unrelated (incl. unparseable) policies
71
+ // survive — never the validated view, which would drop and then persist-away
72
+ // siblings this build can't parse.
73
+ const map = readRaw();
74
+ map[r.policy.name] = r.policy;
75
+ writeRaw(map);
76
+ return { ok: true, errors: [] };
77
+ }
78
+ /** Remove a custom policy. No-op on built-ins. Returns true if something was removed. */
79
+ export function deleteCustomPolicy(name) {
80
+ if (isBuiltinPolicy(name))
81
+ return false;
82
+ const map = readRaw();
83
+ if (!Object.prototype.hasOwnProperty.call(map, name))
84
+ return false;
85
+ delete map[name];
86
+ writeRaw(map);
87
+ return true;
88
+ }
89
+ /** The persisted selection, falling back to 'standard' if unset/stale. */
90
+ export function getSelectedPolicyName() {
91
+ try {
92
+ const name = localStorage.getItem(LS_SELECTED);
93
+ if (name && getPolicy(name))
94
+ return name;
95
+ }
96
+ catch { /* ignore */ }
97
+ return STANDARD_POLICY.name;
98
+ }
99
+ export function setSelectedPolicyName(name) {
100
+ try {
101
+ localStorage.setItem(LS_SELECTED, name);
102
+ }
103
+ catch { /* ignore */ }
104
+ }
105
+ /** The selected policy object, always defined (defaults to STANDARD_POLICY). */
106
+ export function resolveSelectedPolicy() {
107
+ return getPolicy(getSelectedPolicyName()) ?? STANDARD_POLICY;
108
+ }
109
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../guardrail/store.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,SAAS,GAAG,8BAA8B,CAAC;AACjD,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAQ9C;;;uEAGuE;AACvE,SAAS,OAAO;IACd,MAAM,GAAG,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAI,GAA+B,CAAC,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC;AACb,CAAC;AAED;+DAC+D;AAC/D,SAAS,UAAU;IACjB,MAAM,GAAG,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,GAA4B;IAC5C,IAAI,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY;IAC1B,MAAM,QAAQ,GAAkB,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI;KACpD,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;SAC/C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SACxC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,UAAU,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAID;uCACuC;AACvC,MAAM,UAAU,gBAAgB,CAAC,CAAS;IACxC,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IAC/D,IAAI,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,wDAAwD,CAAC,EAAE,CAAC;IAC5G,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,mCAAmC;IACnC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,CAAC;IACd,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClC,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,QAAQ,CAAC,GAAG,CAAC,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,qBAAqB;IACnC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IACxB,OAAO,eAAe,CAAC,IAAI,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAC;QAAC,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;AACzE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,qBAAqB;IACnC,OAAO,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,eAAe,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Policy } from '@corenel/protocol';
2
+ export interface PolicyValidationResult {
3
+ ok: boolean;
4
+ policy?: Policy;
5
+ errors: string[];
6
+ }
7
+ export declare function validatePolicy(input: unknown): PolicyValidationResult;
8
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAoC,MAAM,mBAAmB,CAAC;AAiBlF,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAqBD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CA4DrE"}
@@ -0,0 +1,105 @@
1
+ const LEVELS = ['allow', 'ask', 'deny'];
2
+ const ACTIONS = ['stop', 'warn'];
3
+ /** Older spellings accepted on input and normalized to the canonical vocabulary,
4
+ * so policies persisted before the rename (and hand-written `auto`) still load. */
5
+ const LEVEL_ALIASES = {
6
+ allow: 'allow', ask: 'ask', deny: 'deny',
7
+ auto: 'allow', 'deny-by-default': 'deny',
8
+ };
9
+ /** Canonicalize a level string, or undefined if it is not a known level/alias. */
10
+ function normalizeLevel(v) {
11
+ return typeof v === 'string' ? LEVEL_ALIASES[v] : undefined;
12
+ }
13
+ function isStringArray(v) {
14
+ return Array.isArray(v) && v.every((x) => typeof x === 'string');
15
+ }
16
+ function isPosInt(v) {
17
+ return typeof v === 'number' && Number.isInteger(v) && v > 0;
18
+ }
19
+ /** Recognized keys — anything else is a typo (e.g. `denied:` for `deny:`) that
20
+ * would SILENTLY not apply, so it's rejected rather than ignored. */
21
+ const POLICY_KEYS = new Set([
22
+ 'version', 'name', 'description', 'onViolation', 'maxTurns', 'maxToolCalls',
23
+ 'tools', 'mustCall', 'permissions', 'defaultPermission', 'mutatingDefault',
24
+ ]);
25
+ const TOOLS_KEYS = new Set(['allow', 'deny']);
26
+ /** Names that would collide with Object.prototype slots — saving one corrupts
27
+ * the policy map (see store.ts) and getPolicy returns a non-Policy object. */
28
+ const RESERVED_NAMES = new Set(['__proto__', 'prototype', 'constructor']);
29
+ export function validatePolicy(input) {
30
+ const errors = [];
31
+ if (!input || typeof input !== 'object') {
32
+ return { ok: false, errors: ['Policy must be an object.'] };
33
+ }
34
+ const o = input;
35
+ for (const k of Object.keys(o)) {
36
+ if (!POLICY_KEYS.has(k))
37
+ errors.push(`Unknown policy key "${k}".`);
38
+ }
39
+ if (o.version !== 1)
40
+ errors.push('Policy.version must be 1.');
41
+ if (typeof o.name !== 'string' || !o.name.trim())
42
+ errors.push('Policy.name is required.');
43
+ else if (RESERVED_NAMES.has(o.name.trim()))
44
+ errors.push(`Policy.name "${o.name.trim()}" is reserved — choose another name.`);
45
+ if (o.description !== undefined && typeof o.description !== 'string')
46
+ errors.push('Policy.description must be a string.');
47
+ if (o.onViolation !== undefined && !ACTIONS.includes(o.onViolation)) {
48
+ errors.push(`Policy.onViolation must be one of: ${ACTIONS.join(', ')}.`);
49
+ }
50
+ if (o.maxTurns !== undefined && !isPosInt(o.maxTurns))
51
+ errors.push('Policy.maxTurns must be a positive integer.');
52
+ if (o.maxToolCalls !== undefined && !isPosInt(o.maxToolCalls))
53
+ errors.push('Policy.maxToolCalls must be a positive integer.');
54
+ if (o.tools !== undefined) {
55
+ if (!o.tools || typeof o.tools !== 'object') {
56
+ errors.push('Policy.tools must be an object.');
57
+ }
58
+ else {
59
+ const t = o.tools;
60
+ for (const k of Object.keys(t)) {
61
+ if (!TOOLS_KEYS.has(k))
62
+ errors.push(`Unknown key "${k}" in Policy.tools (expected allow/deny).`);
63
+ }
64
+ if (t.allow !== undefined && !isStringArray(t.allow))
65
+ errors.push('Policy.tools.allow must be a string[].');
66
+ if (t.deny !== undefined && !isStringArray(t.deny))
67
+ errors.push('Policy.tools.deny must be a string[].');
68
+ }
69
+ }
70
+ if (o.mustCall !== undefined && !isStringArray(o.mustCall))
71
+ errors.push('Policy.mustCall must be a string[].');
72
+ if (o.permissions !== undefined) {
73
+ if (!o.permissions || typeof o.permissions !== 'object') {
74
+ errors.push('Policy.permissions must be an object.');
75
+ }
76
+ else {
77
+ const perms = o.permissions;
78
+ for (const [k, v] of Object.entries(perms)) {
79
+ const norm = normalizeLevel(v);
80
+ if (!norm)
81
+ errors.push(`Policy.permissions["${k}"] must be one of: ${LEVELS.join(', ')}.`);
82
+ else
83
+ perms[k] = norm; // normalize aliases in place
84
+ }
85
+ }
86
+ }
87
+ if (o.defaultPermission !== undefined) {
88
+ const norm = normalizeLevel(o.defaultPermission);
89
+ if (!norm)
90
+ errors.push(`Policy.defaultPermission must be one of: ${LEVELS.join(', ')}.`);
91
+ else
92
+ o.defaultPermission = norm;
93
+ }
94
+ if (o.mutatingDefault !== undefined) {
95
+ const norm = normalizeLevel(o.mutatingDefault);
96
+ if (!norm)
97
+ errors.push(`Policy.mutatingDefault must be one of: ${LEVELS.join(', ')}.`);
98
+ else
99
+ o.mutatingDefault = norm;
100
+ }
101
+ if (errors.length)
102
+ return { ok: false, errors };
103
+ return { ok: true, policy: input, errors: [] };
104
+ }
105
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /** Known feature ids (open set — new guarded features add their own). */
2
+ export type FeatureId = 'llm-execution' | (string & {});
3
+ /** What the user can do about a denial — drives the CTA a host renders. */
4
+ export type GuardAction = {
5
+ kind: 'sign-in';
6
+ } | {
7
+ kind: 'upgrade';
8
+ label?: string;
9
+ };
10
+ export type GuardVerdict = {
11
+ allowed: true;
12
+ } | {
13
+ allowed: false;
14
+ guardId: string;
15
+ reason: string;
16
+ action?: GuardAction;
17
+ };
18
+ export declare const ALLOWED: GuardVerdict;
19
+ export interface FeatureGuard {
20
+ /** Stable id ('auth', 'run-quota', 'token', …) — denials carry it for diagnostics. */
21
+ id: string;
22
+ /** Whether this guard has an opinion about the feature. */
23
+ appliesTo(feature: FeatureId): boolean;
24
+ /** Evaluate. May be async (e.g. a server-side quota check). */
25
+ check(feature: FeatureId): GuardVerdict | Promise<GuardVerdict>;
26
+ /** Subscribe to input changes (sign-in/out, quota tick) so hosts re-evaluate. */
27
+ onChange?(cb: () => void): () => void;
28
+ }
29
+ /** Install a guard (evaluation order = registration order). Returns a disposer
30
+ * that removes the guard and detaches its change subscription. */
31
+ export declare function registerGuard(g: FeatureGuard): () => void;
32
+ /** Evaluate every applicable guard in order; the first denial wins. The loop
33
+ * calls this before a tool that declares `requiresFeature` runs. */
34
+ export declare function checkFeature(feature: FeatureId): Promise<GuardVerdict>;
35
+ /** Fires when the guard set or any guard's inputs change (for host UIs). */
36
+ export declare function onGuardsChange(cb: () => void): () => void;
37
+ //# sourceMappingURL=guards.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../guards.ts"],"names":[],"mappings":"AAUA,yEAAyE;AACzE,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GACpB;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,GACjB;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAE9E,eAAO,MAAM,OAAO,EAAE,YAAgC,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,SAAS,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;IACvC,+DAA+D;IAC/D,KAAK,CAAC,OAAO,EAAE,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,iFAAiF;IACjF,QAAQ,CAAC,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CACvC;AAMD;kEACkE;AAClE,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,IAAI,CAUzD;AAED;oEACoE;AACpE,wBAAsB,YAAY,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAO5E;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAGzD"}
package/dist/guards.js ADDED
@@ -0,0 +1,45 @@
1
+ /* Feature guards (kernel) — the central gate for features that need an account, a
2
+ * quota, or (later) a paid plan. The harness LOOP consults checkFeature() before
3
+ * dispatching any tool that declares `requiresFeature`, so feature-gating is a
4
+ * host-agnostic kernel capability (browser, node CLI, sidecar all enforce it).
5
+ * Hosts register guards: the browser an auth/quota guard, the node CLI a token
6
+ * guard. Pure — the React `useGuardVerdict` hook lives host-side.
7
+ *
8
+ * Registered guards are consulted in registration order; the first denial wins;
9
+ * a feature no guard applies to is allowed. */
10
+ export const ALLOWED = { allowed: true };
11
+ const guards = [];
12
+ const subs = new Set();
13
+ const notify = () => subs.forEach((fn) => fn());
14
+ /** Install a guard (evaluation order = registration order). Returns a disposer
15
+ * that removes the guard and detaches its change subscription. */
16
+ export function registerGuard(g) {
17
+ guards.push(g);
18
+ const off = g.onChange?.(notify);
19
+ notify();
20
+ return () => {
21
+ const i = guards.indexOf(g);
22
+ if (i >= 0)
23
+ guards.splice(i, 1);
24
+ off?.();
25
+ notify();
26
+ };
27
+ }
28
+ /** Evaluate every applicable guard in order; the first denial wins. The loop
29
+ * calls this before a tool that declares `requiresFeature` runs. */
30
+ export async function checkFeature(feature) {
31
+ for (const g of [...guards]) {
32
+ if (!g.appliesTo(feature))
33
+ continue;
34
+ const v = await g.check(feature);
35
+ if (!v.allowed)
36
+ return v;
37
+ }
38
+ return ALLOWED;
39
+ }
40
+ /** Fires when the guard set or any guard's inputs change (for host UIs). */
41
+ export function onGuardsChange(cb) {
42
+ subs.add(cb);
43
+ return () => { subs.delete(cb); };
44
+ }
45
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../guards.ts"],"names":[],"mappings":"AAAA;;;;;;;;+CAQ+C;AAY/C,MAAM,CAAC,MAAM,OAAO,GAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAavD,MAAM,MAAM,GAAmB,EAAE,CAAC;AAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAc,CAAC;AACnC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAEhD;kEACkE;AAClE,MAAM,UAAU,aAAa,CAAC,CAAe;IAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC;IACT,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,GAAG,EAAE,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;IACX,CAAC,CAAC;AACJ,CAAC;AAED;oEACoE;AACpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAkB;IACnD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,EAAc;IAC3C,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACb,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare function setAgentLogging(on: boolean): void;
2
+ export declare function isAgentLogging(): boolean;
3
+ export declare function alog(...args: unknown[]): void;
4
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAOA,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAE7C"}
package/dist/log.js ADDED
@@ -0,0 +1,22 @@
1
+ /* Agent debug logging — ON by default for development. The primary observability is the
2
+ * AgentEvent stream (rendered in the UI); this is console tracing for debugging.
3
+ * ON by default; a host disables it via setAgentLogging(false) at boot (the app
4
+ * wires VITE_AGENT_DEBUG=false to that) or at runtime from the console. The kernel
5
+ * stays env-agnostic — no import.meta.env / process.env here. */
6
+ let enabled = true;
7
+ export function setAgentLogging(on) {
8
+ enabled = on;
9
+ console.log(`[agent] logging ${on ? 'enabled' : 'disabled'}`);
10
+ }
11
+ export function isAgentLogging() {
12
+ return enabled;
13
+ }
14
+ export function alog(...args) {
15
+ if (enabled)
16
+ console.debug('[agent]', ...args);
17
+ }
18
+ // Expose setAgentLogging globally for console access
19
+ if (typeof window !== 'undefined') {
20
+ window.setAgentLogging = setAgentLogging;
21
+ }
22
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.js","sourceRoot":"","sources":["../log.ts"],"names":[],"mappings":"AAAA;;;;iEAIiE;AACjE,IAAI,OAAO,GAAG,IAAI,CAAC;AAEnB,MAAM,UAAU,eAAe,CAAC,EAAW;IACzC,OAAO,GAAG,EAAE,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,IAAe;IACrC,IAAI,OAAO;QAAE,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AACjD,CAAC;AAED,qDAAqD;AACrD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAA6C,CAAC,eAAe,GAAG,eAAe,CAAC;AACnF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { FileService } from '@corenel/protocol';
2
+ export interface PromptCompileResult {
3
+ output: string;
4
+ errors?: {
5
+ message: string;
6
+ }[];
7
+ }
8
+ /** Optional workspace context so a compile resolves inherits/includes against
9
+ * sibling files (the editor/agent workspace), not just the inline source. */
10
+ export interface PromptCompileContext {
11
+ files?: FileService | null;
12
+ /** The file's workspace-relative path (enables sibling resolution). */
13
+ path?: string;
14
+ }
15
+ export type PromptCompiler = (source: string, values: Record<string, unknown>, ctx?: PromptCompileContext) => Promise<PromptCompileResult>;
16
+ export declare function setPromptCompiler(fn: PromptCompiler): void;
17
+ export declare function compilePrompt(source: string, values: Record<string, unknown>, ctx?: PromptCompileContext): Promise<PromptCompileResult>;
18
+ //# sourceMappingURL=promptCompiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptCompiler.d.ts","sourceRoot":"","sources":["../promptCompiler.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChC;AAED;6EAC6E;AAC7E,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,CAAC,EAAE,oBAAoB,KACvB,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAIlC,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAE1D;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,CAAC,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAK9B"}
@@ -0,0 +1,11 @@
1
+ let compiler = null;
2
+ export function setPromptCompiler(fn) {
3
+ compiler = fn;
4
+ }
5
+ export async function compilePrompt(source, values, ctx) {
6
+ if (!compiler) {
7
+ throw new Error('No prompt compiler registered — the host must call setPromptCompiler() at boot.');
8
+ }
9
+ return compiler(source, values, ctx);
10
+ }
11
+ //# sourceMappingURL=promptCompiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptCompiler.js","sourceRoot":"","sources":["../promptCompiler.ts"],"names":[],"mappings":"AAmCA,IAAI,QAAQ,GAA0B,IAAI,CAAC;AAE3C,MAAM,UAAU,iBAAiB,CAAC,EAAkB;IAClD,QAAQ,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAc,EACd,MAA+B,EAC/B,GAA0B;IAE1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;IACD,OAAO,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,63 @@
1
+ export type ConfigDecision = 'in-sync' | 'fast-forward' | 'conflict' | 'review' | 'local-only';
2
+ /** The 3-way decision for one file from content hashes: current (user's), latest
3
+ * (shipped default), and baseline (last-synced default; undefined = untracked). */
4
+ export declare function classifyConfig(curHash: string, defHash: string, baseHash: string | undefined): ConfigDecision;
5
+ /** Seed + reconcile the config workspace against the shipped defaults (backfill
6
+ * missing, fast-forward unedited upstream changes). Conflicts are left for
7
+ * listConfigUpdates(). Runs once per load. */
8
+ export declare function seedConfig(): Promise<void>;
9
+ export type ConfigUpdateStatus = 'conflict' | 'review';
10
+ export interface ConfigUpdate {
11
+ path: string;
12
+ /** 'conflict' = edited locally AND changed upstream; 'review' = differs but has
13
+ * no recorded baseline (predates tracking), so we won't guess. */
14
+ status: ConfigUpdateStatus;
15
+ current: string;
16
+ latest: string;
17
+ }
18
+ /** Config files still needing a manual decision after reconcile (fast-forwards and
19
+ * backfills already applied). */
20
+ export declare function listConfigUpdates(): Promise<ConfigUpdate[]>;
21
+ /** Resolve one update: 'replace' takes the shipped default; 'keep' keeps the
22
+ * user's content. Either way the baseline advances to the latest default, so the
23
+ * file won't resurface until the default changes again. */
24
+ export declare function applyConfigUpdate(path: string, choice: 'replace' | 'keep'): Promise<void>;
25
+ /** Replace every pending update with its shipped default. */
26
+ export declare function replaceAllConfigUpdates(): Promise<void>;
27
+ /** Read a config file, falling back to the shipped default when missing/empty —
28
+ * so compose() is never blocked on seeding and never returns an empty prompt. */
29
+ export declare function readConfig(path: string): Promise<string>;
30
+ /** Restore a config file to its shipped default (or remove it if not shipped). */
31
+ export declare function resetConfig(path: string): Promise<void>;
32
+ /** Whether a config path ships a default (so "reset to default" is meaningful). */
33
+ export declare function hasConfigDefault(path: string): boolean;
34
+ /** Persona file paths in the config workspace (personas/<id>.md). */
35
+ export declare function listPersonaPaths(): Promise<string[]>;
36
+ /** Persona id (the filename without .md) for a personas/<id>.md path. */
37
+ export declare function personaIdFromPath(path: string): string;
38
+ export interface PersonaEntry {
39
+ id: string;
40
+ name: string;
41
+ description?: string;
42
+ }
43
+ /** The personas available for the picker (read from personas/*.md, label from
44
+ * frontmatter `name`, else the filename). */
45
+ export declare function loadPersonas(): Promise<PersonaEntry[]>;
46
+ export interface ModeEntry {
47
+ id: string;
48
+ label: string;
49
+ description: string;
50
+ accent?: string;
51
+ }
52
+ /** The agent modes available for the composer — read from modes/*.md, so dropping
53
+ * a modes/<id>.md into the config workspace adds a selectable mode. Label and
54
+ * description come from the file's frontmatter (`name` / `description`); the file
55
+ * body is the mode's steering text, loaded separately at compose time. */
56
+ export declare function loadModes(): Promise<ModeEntry[]>;
57
+ /** Create (or overwrite) a persona file. Returns its id. */
58
+ export declare function createPersona(name: string, system: string): Promise<string>;
59
+ /** Delete a persona file. */
60
+ export declare function deletePersona(id: string): Promise<void>;
61
+ export declare function getSelectedPersona(): string;
62
+ export declare function setSelectedPersona(id: string): void;
63
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../prompts/config.ts"],"names":[],"mappings":"AAqCA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAC/F;mFACmF;AACnF,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAK7G;AAcD;;8CAE8C;AAC9C,wBAAgB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAG1C;AAoCD,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,QAAQ,CAAC;AACvD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb;sEACkE;IAClE,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;iCACiC;AACjC,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAajE;AAED;;2DAE2D;AAC3D,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ/F;AAED,6DAA6D;AAC7D,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7D;AAED;iFACiF;AACjF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAO9D;AAED,kFAAkF;AAClF,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK7D;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,qEAAqE;AACrE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAI1D;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE;AAEhF;6CAC6C;AAC7C,wBAAsB,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAa5D;AAGD,MAAM,WAAW,SAAS;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAI9F;;;0EAG0E;AAC1E,wBAAsB,SAAS,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAgBtD;AAKD,4DAA4D;AAC5D,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIjF;AAED,6BAA6B;AAC7B,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D;AAGD,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AACD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEnD"}