@xemahq/opencode-xema-plugin 0.2.0 → 0.4.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/README.md +33 -40
- package/dist/.source-stamp.json +2 -2
- package/dist/context.d.ts +5 -15
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +4 -14
- package/dist/context.js.map +1 -1
- package/dist/hooks/compaction-invariants.d.ts +8 -0
- package/dist/hooks/compaction-invariants.d.ts.map +1 -0
- package/dist/hooks/compaction-invariants.js +60 -0
- package/dist/hooks/compaction-invariants.js.map +1 -0
- package/dist/hooks/root-turn-completion.d.ts +14 -0
- package/dist/hooks/root-turn-completion.d.ts.map +1 -0
- package/dist/hooks/root-turn-completion.js +84 -0
- package/dist/hooks/root-turn-completion.js.map +1 -0
- package/dist/hooks/shell-env-hygiene.d.ts +6 -0
- package/dist/hooks/shell-env-hygiene.d.ts.map +1 -0
- package/dist/hooks/shell-env-hygiene.js +10 -0
- package/dist/hooks/shell-env-hygiene.js.map +1 -0
- package/dist/hooks/subagent-fanout-ceiling.d.ts +18 -17
- package/dist/hooks/subagent-fanout-ceiling.d.ts.map +1 -1
- package/dist/hooks/subagent-fanout-ceiling.js +106 -92
- package/dist/hooks/subagent-fanout-ceiling.js.map +1 -1
- package/dist/hooks/system-overlay.d.ts +6 -0
- package/dist/hooks/system-overlay.d.ts.map +1 -0
- package/dist/hooks/system-overlay.js +40 -0
- package/dist/hooks/system-overlay.js.map +1 -0
- package/dist/hooks/tool-surface-observation.d.ts +14 -0
- package/dist/hooks/tool-surface-observation.d.ts.map +1 -0
- package/dist/hooks/tool-surface-observation.js +30 -0
- package/dist/hooks/tool-surface-observation.js.map +1 -0
- package/dist/hooks/workspace-listing.js +3 -3
- package/dist/hooks/workspace-listing.js.map +1 -1
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -81
- package/dist/index.js.map +1 -1
- package/dist/plugin-id.d.ts +2 -0
- package/dist/plugin-id.d.ts.map +1 -0
- package/dist/plugin-id.js +2 -0
- package/dist/plugin-id.js.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +86 -0
- package/dist/plugin.js.map +1 -0
- package/dist/runtime-events.d.ts +17 -0
- package/dist/runtime-events.d.ts.map +1 -0
- package/dist/runtime-events.js +39 -0
- package/dist/runtime-events.js.map +1 -0
- package/package.json +12 -17
- package/{plugin.mjs → plugin/xema-runtime-bridge/index.js} +7770 -2857
- package/plugin/xema-runtime-bridge/package.json +8 -0
- package/dist/hooks/session-idle-autocommit.d.ts +0 -11
- package/dist/hooks/session-idle-autocommit.d.ts.map +0 -1
- package/dist/hooks/session-idle-autocommit.js +0 -206
- package/dist/hooks/session-idle-autocommit.js.map +0 -1
- package/dist/hooks/system-prompt-overlay.d.ts +0 -3
- package/dist/hooks/system-prompt-overlay.d.ts.map +0 -1
- package/dist/hooks/system-prompt-overlay.js +0 -30
- package/dist/hooks/system-prompt-overlay.js.map +0 -1
- package/dist/opencode-types.d.ts +0 -69
- package/dist/opencode-types.d.ts.map +0 -1
- package/dist/opencode-types.js +0 -4
- package/dist/opencode-types.js.map +0 -1
- package/dist/plugin-entry.d.ts +0 -2
- package/dist/plugin-entry.d.ts.map +0 -1
- package/dist/plugin-entry.js +0 -2
- package/dist/plugin-entry.js.map +0 -1
- package/dist/session-state.d.ts +0 -20
- package/dist/session-state.d.ts.map +0 -1
- package/dist/session-state.js +0 -43
- package/dist/session-state.js.map +0 -1
- package/dist/tools/runtime.d.ts +0 -2
- package/dist/tools/runtime.d.ts.map +0 -1
- package/dist/tools/runtime.js +0 -2
- package/dist/tools/runtime.js.map +0 -1
- package/dist/tools/service-token.d.ts +0 -3
- package/dist/tools/service-token.d.ts.map +0 -1
- package/dist/tools/service-token.js +0 -31
- package/dist/tools/service-token.js.map +0 -1
- package/dist/tools/shared.d.ts +0 -3
- package/dist/tools/shared.d.ts.map +0 -1
- package/dist/tools/shared.js +0 -11
- package/dist/tools/shared.js.map +0 -1
- package/dist/tools/xema-memory.d.ts +0 -31
- package/dist/tools/xema-memory.d.ts.map +0 -1
- package/dist/tools/xema-memory.js +0 -157
- package/dist/tools/xema-memory.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,2BAA2B,EAC3B,2BAA2B,EAC3B,gBAAgB,EAChB,gBAAgB,GAIjB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,GAEtB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACvF,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-id.d.ts","sourceRoot":"","sources":["../src/plugin-id.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,6BAA6B,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-id.js","sourceRoot":"","sources":["../src/plugin-id.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAuG/C,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAqD,CAAC;AAE3E,eAAe,MAAM,CAAC"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { buildCompactionInvariantsHook } from './hooks/compaction-invariants.js';
|
|
2
|
+
import { createRootTurnCompletion } from './hooks/root-turn-completion.js';
|
|
3
|
+
import { scrubShellEnv } from './hooks/shell-env-hygiene.js';
|
|
4
|
+
import { createSubagentFanoutCeiling, resolveSubagentFanoutLimit, } from './hooks/subagent-fanout-ceiling.js';
|
|
5
|
+
import { buildSystemOverlayHook } from './hooks/system-overlay.js';
|
|
6
|
+
import { observeToolSurface, resolveRuntimeStateDir } from './hooks/tool-surface-observation.js';
|
|
7
|
+
import { info, warn } from './logger.js';
|
|
8
|
+
import { XEMA_RUNTIME_BRIDGE_PLUGIN_ID } from './plugin-id.js';
|
|
9
|
+
import { parseRuntimeSessionEvent } from './runtime-events.js';
|
|
10
|
+
const TOOL_SURFACE_EVENTS = new Set([
|
|
11
|
+
'plugin.updated',
|
|
12
|
+
'integration.updated',
|
|
13
|
+
'skill.updated',
|
|
14
|
+
'agent.updated',
|
|
15
|
+
]);
|
|
16
|
+
async function setup(ctx) {
|
|
17
|
+
const directory = ctx.location.directory;
|
|
18
|
+
const limit = resolveSubagentFanoutLimit();
|
|
19
|
+
const fanout = createSubagentFanoutCeiling({ limit });
|
|
20
|
+
const turnCompletion = createRootTurnCompletion({
|
|
21
|
+
resolveParentId: async (sessionId) => {
|
|
22
|
+
const session = await ctx.session.get({ sessionID: sessionId });
|
|
23
|
+
return session.parentID !== undefined && session.parentID.length > 0
|
|
24
|
+
? session.parentID
|
|
25
|
+
: undefined;
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const stateDir = resolveRuntimeStateDir();
|
|
29
|
+
const observe = () => observeToolSurface({
|
|
30
|
+
stateDir,
|
|
31
|
+
listToolIds: async () => (await ctx.tool.list()).map((tool) => tool.id),
|
|
32
|
+
});
|
|
33
|
+
const registrations = [
|
|
34
|
+
await ctx.session.hook('context', buildSystemOverlayHook(directory)),
|
|
35
|
+
await ctx.session.hook('compaction', buildCompactionInvariantsHook(directory)),
|
|
36
|
+
await ctx.tool.hook('execute.before', (input) => fanout.beforeToolCall({ tool: input.tool, sessionID: input.sessionID, id: input.id })),
|
|
37
|
+
await ctx.tool.hook('execute.after', (input) => {
|
|
38
|
+
fanout.afterToolCall({ tool: input.tool, sessionID: input.sessionID, id: input.id });
|
|
39
|
+
}),
|
|
40
|
+
await ctx.shell.hook('create.before', scrubShellEnv),
|
|
41
|
+
];
|
|
42
|
+
const abort = new AbortController();
|
|
43
|
+
const events = (async () => {
|
|
44
|
+
try {
|
|
45
|
+
for await (const event of ctx.event.subscribe({ signal: abort.signal })) {
|
|
46
|
+
handleEvent(event);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (err) {
|
|
50
|
+
if (!abort.signal.aborted) {
|
|
51
|
+
warn(`event subscription ended unexpectedly: ${err instanceof Error ? err.message : String(err)}. ` +
|
|
52
|
+
'Fan-out children now release only by TTL and turn-completion notices stop until restart.');
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
})();
|
|
56
|
+
function handleEvent(event) {
|
|
57
|
+
const type = event?.type;
|
|
58
|
+
if (typeof type === 'string' && TOOL_SURFACE_EVENTS.has(type)) {
|
|
59
|
+
void observe();
|
|
60
|
+
}
|
|
61
|
+
const parsed = parseRuntimeSessionEvent(event);
|
|
62
|
+
if (parsed === undefined)
|
|
63
|
+
return;
|
|
64
|
+
if (parsed.kind === 'created') {
|
|
65
|
+
fanout.onSessionCreated(parsed.sessionId, parsed.parentId);
|
|
66
|
+
turnCompletion.onSessionCreated(parsed.sessionId, parsed.parentId);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
fanout.onSessionTerminal(parsed.sessionId);
|
|
70
|
+
void turnCompletion.onSessionTerminal(parsed.sessionId, parsed.outcome, parsed.executionId);
|
|
71
|
+
}
|
|
72
|
+
await observe();
|
|
73
|
+
info(`setup: ${XEMA_RUNTIME_BRIDGE_PLUGIN_ID} ready (OpenCode ${ctx.app.version}, dir=${directory}, ` +
|
|
74
|
+
`tools=0, sub-agent fan-out limit=${limit}, tool surface → ${stateDir})`);
|
|
75
|
+
return async () => {
|
|
76
|
+
abort.abort();
|
|
77
|
+
fanout.dispose();
|
|
78
|
+
for (const registration of registrations) {
|
|
79
|
+
await registration.dispose();
|
|
80
|
+
}
|
|
81
|
+
await events;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
const plugin = { id: XEMA_RUNTIME_BRIDGE_PLUGIN_ID, setup };
|
|
85
|
+
export default plugin;
|
|
86
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare enum SessionExecutionOutcome {
|
|
2
|
+
Succeeded = "succeeded",
|
|
3
|
+
Failed = "failed",
|
|
4
|
+
Interrupted = "interrupted"
|
|
5
|
+
}
|
|
6
|
+
export type RuntimeSessionEvent = {
|
|
7
|
+
readonly kind: 'created';
|
|
8
|
+
readonly sessionId: string;
|
|
9
|
+
readonly parentId: string | undefined;
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: 'terminal';
|
|
12
|
+
readonly sessionId: string;
|
|
13
|
+
readonly outcome: SessionExecutionOutcome;
|
|
14
|
+
readonly executionId: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function parseRuntimeSessionEvent(event: unknown): RuntimeSessionEvent | undefined;
|
|
17
|
+
//# sourceMappingURL=runtime-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-events.d.ts","sourceRoot":"","sources":["../src/runtime-events.ts"],"names":[],"mappings":"AAiBA,oBAAY,uBAAuB;IACjC,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,WAAW,gBAAgB;CAC5B;AASD,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAE1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAMN,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAuBxF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export var SessionExecutionOutcome;
|
|
2
|
+
(function (SessionExecutionOutcome) {
|
|
3
|
+
SessionExecutionOutcome["Succeeded"] = "succeeded";
|
|
4
|
+
SessionExecutionOutcome["Failed"] = "failed";
|
|
5
|
+
SessionExecutionOutcome["Interrupted"] = "interrupted";
|
|
6
|
+
})(SessionExecutionOutcome || (SessionExecutionOutcome = {}));
|
|
7
|
+
const TERMINAL_EVENT_TYPES = Object.freeze({
|
|
8
|
+
'session.execution.succeeded': SessionExecutionOutcome.Succeeded,
|
|
9
|
+
'session.execution.failed': SessionExecutionOutcome.Failed,
|
|
10
|
+
'session.execution.interrupted': SessionExecutionOutcome.Interrupted,
|
|
11
|
+
});
|
|
12
|
+
function isRecord(value) {
|
|
13
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
14
|
+
}
|
|
15
|
+
export function parseRuntimeSessionEvent(event) {
|
|
16
|
+
if (!isRecord(event) || typeof event.type !== 'string' || !isRecord(event.data)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
const sessionId = event.data.sessionID;
|
|
20
|
+
if (typeof sessionId !== 'string' || sessionId.length === 0) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
if (event.type === 'session.created') {
|
|
24
|
+
const parent = event.data.parentID;
|
|
25
|
+
return {
|
|
26
|
+
kind: 'created',
|
|
27
|
+
sessionId,
|
|
28
|
+
parentId: typeof parent === 'string' && parent.length > 0 ? parent : undefined,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const outcome = Object.hasOwn(TERMINAL_EVENT_TYPES, event.type)
|
|
32
|
+
? TERMINAL_EVENT_TYPES[event.type]
|
|
33
|
+
: undefined;
|
|
34
|
+
if (outcome === undefined || typeof event.id !== 'string' || event.id.length === 0) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
return { kind: 'terminal', sessionId, outcome, executionId: event.id };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=runtime-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-events.js","sourceRoot":"","sources":["../src/runtime-events.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAN,IAAY,uBAIX;AAJD,WAAY,uBAAuB;IACjC,kDAAuB,CAAA;IACvB,4CAAiB,CAAA;IACjB,sDAA2B,CAAA;AAC7B,CAAC,EAJW,uBAAuB,KAAvB,uBAAuB,QAIlC;AAED,MAAM,oBAAoB,GACxB,MAAM,CAAC,MAAM,CAAC;IACZ,6BAA6B,EAAE,uBAAuB,CAAC,SAAS;IAChE,0BAA0B,EAAE,uBAAuB,CAAC,MAAM;IAC1D,+BAA+B,EAAE,uBAAuB,CAAC,WAAW;CACrE,CAAC,CAAC;AAgBL,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAChF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;IACvC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QACnC,OAAO;YACL,IAAI,EAAE,SAAS;YACf,SAAS;YACT,QAAQ,EAAE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;SAC/E,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,KAAK,CAAC,IAAI,CAAC;QAC7D,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;QAClC,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;AACzE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/opencode-xema-plugin",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.4.0",
|
|
4
|
+
"description": "OpenCode V2 plugin `xema-runtime-bridge`: the Xema system overlay, compaction continuation invariants, root-session auto-commit, the sub-agent fan-out ceiling, tool-surface observation and shell env hygiene. Contributes no tools.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
|
|
7
7
|
"homepage": "https://xema.dev",
|
|
@@ -20,20 +20,19 @@
|
|
|
20
20
|
"types": "dist/index.d.ts",
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
|
-
"plugin
|
|
23
|
+
"plugin"
|
|
24
24
|
],
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@opencode
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
"@opencode/plugin": "2.0.20"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"zod": "^4.3.6"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
|
-
"@opencode
|
|
32
|
+
"@opencode/plugin": "2.0.20",
|
|
32
33
|
"@types/node": "25.2.3",
|
|
33
34
|
"esbuild": "^0.25.4",
|
|
34
|
-
"typescript": "5.9.3"
|
|
35
|
-
"zod": "^4.3.6",
|
|
36
|
-
"@xemahq/kernel-contracts": "^33.5.0"
|
|
35
|
+
"typescript": "5.9.3"
|
|
37
36
|
},
|
|
38
37
|
"exports": {
|
|
39
38
|
".": {
|
|
@@ -41,16 +40,12 @@
|
|
|
41
40
|
"xema-source": "./src/index.ts",
|
|
42
41
|
"default": "./dist/index.js"
|
|
43
42
|
},
|
|
44
|
-
"./plugin
|
|
45
|
-
"./dist/lib/*": {
|
|
46
|
-
"types": "./dist/lib/*.d.ts",
|
|
47
|
-
"default": "./dist/lib/*.js"
|
|
48
|
-
}
|
|
43
|
+
"./plugin/xema-runtime-bridge": "./plugin/xema-runtime-bridge/index.js"
|
|
49
44
|
},
|
|
50
45
|
"scripts": {
|
|
51
|
-
"clean": "rm -rf dist plugin
|
|
46
|
+
"clean": "rm -rf dist plugin",
|
|
52
47
|
"build": "pnpm run clean && tsc -p tsconfig.json && node scripts/write-dist-source-stamp.mjs && pnpm run bundle",
|
|
53
|
-
"bundle": "
|
|
48
|
+
"bundle": "node scripts/bundle-plugin.mjs",
|
|
54
49
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
55
50
|
"test": "node --test tests/*.test.mjs"
|
|
56
51
|
}
|