@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.
- package/dist/compression.d.ts +11 -0
- package/dist/compression.d.ts.map +1 -0
- package/dist/compression.js +27 -0
- package/dist/compression.js.map +1 -0
- package/dist/conversation.d.ts +29 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +25 -0
- package/dist/conversation.js.map +1 -0
- package/dist/core/loop.d.ts +31 -0
- package/dist/core/loop.d.ts.map +1 -0
- package/dist/core/loop.js +237 -0
- package/dist/core/loop.js.map +1 -0
- package/dist/dag/executeNode.d.ts +41 -0
- package/dist/dag/executeNode.d.ts.map +1 -0
- package/dist/dag/executeNode.js +81 -0
- package/dist/dag/executeNode.js.map +1 -0
- package/dist/fileSchema.d.ts +7 -0
- package/dist/fileSchema.d.ts.map +1 -0
- package/dist/fileSchema.js +40 -0
- package/dist/fileSchema.js.map +1 -0
- package/dist/guardrail/builtins.d.ts +9 -0
- package/dist/guardrail/builtins.d.ts.map +1 -0
- package/dist/guardrail/builtins.js +61 -0
- package/dist/guardrail/builtins.js.map +1 -0
- package/dist/guardrail/glob.d.ts +3 -0
- package/dist/guardrail/glob.d.ts.map +1 -0
- package/dist/guardrail/glob.js +33 -0
- package/dist/guardrail/glob.js.map +1 -0
- package/dist/guardrail/guardrail.d.ts +25 -0
- package/dist/guardrail/guardrail.d.ts.map +1 -0
- package/dist/guardrail/guardrail.js +67 -0
- package/dist/guardrail/guardrail.js.map +1 -0
- package/dist/guardrail/index.d.ts +9 -0
- package/dist/guardrail/index.d.ts.map +1 -0
- package/dist/guardrail/index.js +11 -0
- package/dist/guardrail/index.js.map +1 -0
- package/dist/guardrail/permission-service.d.ts +53 -0
- package/dist/guardrail/permission-service.d.ts.map +1 -0
- package/dist/guardrail/permission-service.js +147 -0
- package/dist/guardrail/permission-service.js.map +1 -0
- package/dist/guardrail/serialize.d.ts +9 -0
- package/dist/guardrail/serialize.d.ts.map +1 -0
- package/dist/guardrail/serialize.js +53 -0
- package/dist/guardrail/serialize.js.map +1 -0
- package/dist/guardrail/store.d.ts +26 -0
- package/dist/guardrail/store.d.ts.map +1 -0
- package/dist/guardrail/store.js +109 -0
- package/dist/guardrail/store.js.map +1 -0
- package/dist/guardrail/validate.d.ts +8 -0
- package/dist/guardrail/validate.d.ts.map +1 -0
- package/dist/guardrail/validate.js +105 -0
- package/dist/guardrail/validate.js.map +1 -0
- package/dist/guards.d.ts +37 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +45 -0
- package/dist/guards.js.map +1 -0
- package/dist/log.d.ts +4 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +22 -0
- package/dist/log.js.map +1 -0
- package/dist/promptCompiler.d.ts +18 -0
- package/dist/promptCompiler.d.ts.map +1 -0
- package/dist/promptCompiler.js +11 -0
- package/dist/promptCompiler.js.map +1 -0
- package/dist/prompts/config.d.ts +63 -0
- package/dist/prompts/config.d.ts.map +1 -0
- package/dist/prompts/config.js +268 -0
- package/dist/prompts/config.js.map +1 -0
- package/dist/prompts/host.d.ts +30 -0
- package/dist/prompts/host.d.ts.map +1 -0
- package/dist/prompts/host.js +11 -0
- package/dist/prompts/host.js.map +1 -0
- package/dist/prompts/index.d.ts +50 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +105 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/library/defaults.generated.d.ts +2 -0
- package/dist/prompts/library/defaults.generated.d.ts.map +1 -0
- package/dist/prompts/library/defaults.generated.js +31 -0
- package/dist/prompts/library/defaults.generated.js.map +1 -0
- package/dist/prompts/library/index.d.ts +8 -0
- package/dist/prompts/library/index.d.ts.map +1 -0
- package/dist/prompts/library/index.js +28 -0
- package/dist/prompts/library/index.js.map +1 -0
- package/dist/providers/gateway.d.ts +58 -0
- package/dist/providers/gateway.d.ts.map +1 -0
- package/dist/providers/gateway.js +145 -0
- package/dist/providers/gateway.js.map +1 -0
- package/dist/services.d.ts +29 -0
- package/dist/services.d.ts.map +1 -0
- package/dist/services.js +22 -0
- package/dist/services.js.map +1 -0
- package/dist/sidecar/host.d.ts +69 -0
- package/dist/sidecar/host.d.ts.map +1 -0
- package/dist/sidecar/host.js +228 -0
- package/dist/sidecar/host.js.map +1 -0
- package/dist/sidecar/server.d.ts +42 -0
- package/dist/sidecar/server.d.ts.map +1 -0
- package/dist/sidecar/server.js +267 -0
- package/dist/sidecar/server.js.map +1 -0
- package/dist/skills.d.ts +39 -0
- package/dist/skills.d.ts.map +1 -0
- package/dist/skills.js +216 -0
- package/dist/skills.js.map +1 -0
- package/dist/systemParts.d.ts +10 -0
- package/dist/systemParts.d.ts.map +1 -0
- package/dist/systemParts.js +21 -0
- package/dist/systemParts.js.map +1 -0
- package/dist/todos.d.ts +34 -0
- package/dist/todos.d.ts.map +1 -0
- package/dist/todos.js +112 -0
- package/dist/todos.js.map +1 -0
- package/dist/tools/builtins.d.ts +20 -0
- package/dist/tools/builtins.d.ts.map +1 -0
- package/dist/tools/builtins.js +335 -0
- package/dist/tools/builtins.js.map +1 -0
- package/dist/tools/files.d.ts +11 -0
- package/dist/tools/files.d.ts.map +1 -0
- package/dist/tools/files.js +161 -0
- package/dist/tools/files.js.map +1 -0
- package/dist/tools/http.d.ts +3 -0
- package/dist/tools/http.d.ts.map +1 -0
- package/dist/tools/http.js +71 -0
- package/dist/tools/http.js.map +1 -0
- package/dist/tools/namespaces.d.ts +27 -0
- package/dist/tools/namespaces.d.ts.map +1 -0
- package/dist/tools/namespaces.js +83 -0
- package/dist/tools/namespaces.js.map +1 -0
- package/dist/tools/registry.d.ts +8 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +14 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/sessions.d.ts +3 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +149 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/todo.d.ts +3 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +38 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/urlGuard.d.ts +9 -0
- package/dist/tools/urlGuard.d.ts.map +1 -0
- package/dist/tools/urlGuard.js +80 -0
- package/dist/tools/urlGuard.js.map +1 -0
- package/dist/tools/web.d.ts +3 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +35 -0
- package/dist/tools/web.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todo.js","sourceRoot":"","sources":["../../tools/todo.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,YAAY;IAClB,SAAS,EAAE,IAAI,EAAE,+DAA+D;IAChF,WAAW,EACT,mGAAmG;QACnG,mGAAmG;QACnG,qGAAqG;QACrG,uGAAuG;QACvG,mDAAmD;IACrD,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,6CAA6C;gBAC1D,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uDAAuD,EAAE;wBAC5F,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;wBACvF,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE;wBACpF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2BAA2B,EAAE;wBAClE,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE;wBACnG,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gDAAgD,EAAE;qBAC5F;oBACD,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;iBACpC;aACF;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,KAAK,CAAC,GAAG,CAAC,IAAI;QACZ,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAE,IAA4B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,IAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;QAC3E,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,aAAa,CAAC,CAAC;QACtE,OAAO,sBAAsB,IAAI,IAAI,KAAK,CAAC,MAAM,QAAQ,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IACtG,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Validate a tool-supplied URL. Returns null when allowed, else a human-readable
|
|
2
|
+
* reason it is refused (http(s) only; no internal/loopback/metadata hosts). */
|
|
3
|
+
export declare function outboundUrlError(raw: string): string | null;
|
|
4
|
+
/** fetch() with SSRF protection: the URL and every redirect hop are validated by
|
|
5
|
+
* outboundUrlError, following redirects MANUALLY so a 3xx can't escape to an
|
|
6
|
+
* internal host. Throws Error(reason) on a blocked URL/hop. In the browser a
|
|
7
|
+
* cross-origin redirect is opaque (unreadable) and is refused rather than followed. */
|
|
8
|
+
export declare function safeFetch(url: string, init?: RequestInit): Promise<Response>;
|
|
9
|
+
//# sourceMappingURL=urlGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlGuard.d.ts","sourceRoot":"","sources":["../../tools/urlGuard.ts"],"names":[],"mappings":"AAiCA;+EAC+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU3D;AAID;;;uFAGuF;AACvF,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CActF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/* SSRF guard for outbound HTTP issued by agent/workflow tools. The kernel is
|
|
2
|
+
* host-agnostic: the same api_request tool / api node runs in the browser (where
|
|
3
|
+
* the same-origin policy limits reach) AND in the Node/sidecar host (where it does
|
|
4
|
+
* not), so refusing internal targets has to live HERE, not rely on CORS.
|
|
5
|
+
*
|
|
6
|
+
* outboundUrlError validates a single URL (scheme + host); safeFetch follows
|
|
7
|
+
* redirects manually so a 3xx can't bounce from an allowed host to an internal one.
|
|
8
|
+
*/
|
|
9
|
+
/** Hostnames / IP literals a tool-driven request must never reach: loopback,
|
|
10
|
+
* link-local (incl. the cloud metadata endpoint), private and CGNAT ranges. */
|
|
11
|
+
function isBlockedHost(host) {
|
|
12
|
+
const h = host.toLowerCase().replace(/^\[/, '').replace(/\]$/, ''); // strip IPv6 brackets
|
|
13
|
+
if (!h)
|
|
14
|
+
return true;
|
|
15
|
+
if (h === 'localhost' || h.endsWith('.localhost'))
|
|
16
|
+
return true;
|
|
17
|
+
if (h === 'metadata.google.internal' || h.endsWith('.internal') || h.endsWith('.local'))
|
|
18
|
+
return true;
|
|
19
|
+
// IPv6 loopback / unspecified / unique-local (fc00::/7) / link-local (fe80::/10).
|
|
20
|
+
if (h === '::1' || h === '::')
|
|
21
|
+
return true;
|
|
22
|
+
if (/^f[cd][0-9a-f]{2}:/.test(h) || /^fe[89ab][0-9a-f]:/.test(h))
|
|
23
|
+
return true;
|
|
24
|
+
// IPv4 literal.
|
|
25
|
+
const m = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(h);
|
|
26
|
+
if (m) {
|
|
27
|
+
const a = Number(m[1]);
|
|
28
|
+
const b = Number(m[2]);
|
|
29
|
+
if (a === 0 || a === 10 || a === 127)
|
|
30
|
+
return true; // this-host / private / loopback
|
|
31
|
+
if (a === 169 && b === 254)
|
|
32
|
+
return true; // link-local + cloud metadata (169.254.169.254)
|
|
33
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
34
|
+
return true; // private
|
|
35
|
+
if (a === 192 && b === 168)
|
|
36
|
+
return true; // private
|
|
37
|
+
if (a === 100 && b >= 64 && b <= 127)
|
|
38
|
+
return true; // CGNAT (100.64.0.0/10)
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
/** Validate a tool-supplied URL. Returns null when allowed, else a human-readable
|
|
43
|
+
* reason it is refused (http(s) only; no internal/loopback/metadata hosts). */
|
|
44
|
+
export function outboundUrlError(raw) {
|
|
45
|
+
let u;
|
|
46
|
+
try {
|
|
47
|
+
u = new URL(raw);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return `invalid URL: "${raw}"`;
|
|
51
|
+
}
|
|
52
|
+
if (u.protocol !== 'http:' && u.protocol !== 'https:')
|
|
53
|
+
return `url must be http(s): "${raw}"`;
|
|
54
|
+
if (isBlockedHost(u.hostname))
|
|
55
|
+
return `refusing to call an internal/loopback host: "${u.hostname}"`;
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const MAX_REDIRECTS = 5;
|
|
59
|
+
/** fetch() with SSRF protection: the URL and every redirect hop are validated by
|
|
60
|
+
* outboundUrlError, following redirects MANUALLY so a 3xx can't escape to an
|
|
61
|
+
* internal host. Throws Error(reason) on a blocked URL/hop. In the browser a
|
|
62
|
+
* cross-origin redirect is opaque (unreadable) and is refused rather than followed. */
|
|
63
|
+
export async function safeFetch(url, init = {}) {
|
|
64
|
+
let current = url;
|
|
65
|
+
for (let hop = 0; hop <= MAX_REDIRECTS; hop++) {
|
|
66
|
+
const bad = outboundUrlError(current);
|
|
67
|
+
if (bad)
|
|
68
|
+
throw new Error(bad);
|
|
69
|
+
const res = await fetch(current, { ...init, redirect: 'manual' });
|
|
70
|
+
if (res.type === 'opaqueredirect')
|
|
71
|
+
throw new Error('refusing to follow an opaque cross-origin redirect');
|
|
72
|
+
if (res.status >= 300 && res.status < 400 && res.headers.has('location')) {
|
|
73
|
+
current = new URL(res.headers.get('location'), current).toString();
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
return res;
|
|
77
|
+
}
|
|
78
|
+
throw new Error(`too many redirects (> ${MAX_REDIRECTS})`);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=urlGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlGuard.js","sourceRoot":"","sources":["../../tools/urlGuard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../tools/web.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOnD,eAAO,MAAM,aAAa,EAAE,SA6B3B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
function str(args, key) {
|
|
2
|
+
const v = args[key];
|
|
3
|
+
return typeof v === 'string' ? v : v == null ? '' : String(v);
|
|
4
|
+
}
|
|
5
|
+
export const webSearchTool = {
|
|
6
|
+
name: 'web_search',
|
|
7
|
+
// Gateway-backed (can spend the Prompd-paid Tavily fallback) — account-gated
|
|
8
|
+
// when run directly from the console.
|
|
9
|
+
requiresFeature: 'llm-execution',
|
|
10
|
+
description: 'Search the web for current information and return the top results (title, URL, snippet) ' +
|
|
11
|
+
'plus a short synthesized answer. Use for facts that may be recent or outside your knowledge.',
|
|
12
|
+
parameters: {
|
|
13
|
+
type: 'object',
|
|
14
|
+
properties: { query: { type: 'string', description: 'The search query.' } },
|
|
15
|
+
required: ['query'],
|
|
16
|
+
},
|
|
17
|
+
async run(args, ctx) {
|
|
18
|
+
if (!ctx.http)
|
|
19
|
+
throw new Error('Web search is unavailable here.');
|
|
20
|
+
const query = str(args, 'query');
|
|
21
|
+
if (!query.trim())
|
|
22
|
+
throw new Error('Provide a non-empty query.');
|
|
23
|
+
const r = await ctx.http.post('/tools/web-search', { query });
|
|
24
|
+
const data = r?.data || {};
|
|
25
|
+
const results = data.results || [];
|
|
26
|
+
const parts = [];
|
|
27
|
+
if (data.answer)
|
|
28
|
+
parts.push(`Answer: ${data.answer}`);
|
|
29
|
+
if (results.length) {
|
|
30
|
+
parts.push(results.map((x, i) => `${i + 1}. ${x.title || x.url}\n${x.url}\n${(x.content || '').trim()}`).join('\n\n'));
|
|
31
|
+
}
|
|
32
|
+
return parts.join('\n\n') || 'No results.';
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../tools/web.ts"],"names":[],"mappings":"AAKA,SAAS,GAAG,CAAC,IAA6B,EAAE,GAAW;IACrD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAc;IACtC,IAAI,EAAE,YAAY;IAClB,6EAA6E;IAC7E,sCAAsC;IACtC,eAAe,EAAE,eAAe;IAChC,WAAW,EACT,0FAA0F;QAC1F,8FAA8F;IAChG,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE;QAC3E,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG;QACjB,IAAI,CAAC,GAAG,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,OAAO,GAA8D,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9F,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAC3G,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC;IAC7C,CAAC;CACF,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@corenel/harness",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Corenel — host-agnostic agent harness (kernel). Consumed as source; the app resolves it via the `corenel` path alias, node consumers via this workspace package + the exports map below. The app never hits these exports (the alias intercepts first), so the .ts-only wildcard is safe — node only ever imports the clean .ts kernel subpaths (e.g. corenel/sidecar/server), never the coupled .tsx UI.",
|
|
6
|
+
"exports": {
|
|
7
|
+
".": "./index.ts",
|
|
8
|
+
"./guardrail": "./guardrail/index.ts",
|
|
9
|
+
"./prompts": "./prompts/index.ts",
|
|
10
|
+
"./prompts/library": "./prompts/library/index.ts",
|
|
11
|
+
"./*": "./*.ts"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@corenel/protocol": "workspace:*",
|
|
15
|
+
"openai": "^4.77.0",
|
|
16
|
+
"yaml": "^2.8.3"
|
|
17
|
+
},
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"@xyflow/react": "^12.11.0",
|
|
20
|
+
"dagre": "^0.8.5",
|
|
21
|
+
"react": "^18.3.1"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public",
|
|
25
|
+
"exports": {
|
|
26
|
+
".": {
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./guardrail": {
|
|
31
|
+
"types": "./dist/guardrail/index.d.ts",
|
|
32
|
+
"default": "./dist/guardrail/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./prompts": {
|
|
35
|
+
"types": "./dist/prompts/index.d.ts",
|
|
36
|
+
"default": "./dist/prompts/index.js"
|
|
37
|
+
},
|
|
38
|
+
"./prompts/library": {
|
|
39
|
+
"types": "./dist/prompts/library/index.d.ts",
|
|
40
|
+
"default": "./dist/prompts/library/index.js"
|
|
41
|
+
},
|
|
42
|
+
"./*": {
|
|
43
|
+
"types": "./dist/*.d.ts",
|
|
44
|
+
"default": "./dist/*.js"
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"files": [
|
|
49
|
+
"dist"
|
|
50
|
+
],
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "tsc -p tsconfig.build.json",
|
|
53
|
+
"prepublishOnly": "tsc -p tsconfig.build.json"
|
|
54
|
+
}
|
|
55
|
+
}
|