@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.
Files changed (87) hide show
  1. package/README.md +33 -40
  2. package/dist/.source-stamp.json +2 -2
  3. package/dist/context.d.ts +5 -15
  4. package/dist/context.d.ts.map +1 -1
  5. package/dist/context.js +4 -14
  6. package/dist/context.js.map +1 -1
  7. package/dist/hooks/compaction-invariants.d.ts +8 -0
  8. package/dist/hooks/compaction-invariants.d.ts.map +1 -0
  9. package/dist/hooks/compaction-invariants.js +60 -0
  10. package/dist/hooks/compaction-invariants.js.map +1 -0
  11. package/dist/hooks/root-turn-completion.d.ts +14 -0
  12. package/dist/hooks/root-turn-completion.d.ts.map +1 -0
  13. package/dist/hooks/root-turn-completion.js +84 -0
  14. package/dist/hooks/root-turn-completion.js.map +1 -0
  15. package/dist/hooks/shell-env-hygiene.d.ts +6 -0
  16. package/dist/hooks/shell-env-hygiene.d.ts.map +1 -0
  17. package/dist/hooks/shell-env-hygiene.js +10 -0
  18. package/dist/hooks/shell-env-hygiene.js.map +1 -0
  19. package/dist/hooks/subagent-fanout-ceiling.d.ts +18 -17
  20. package/dist/hooks/subagent-fanout-ceiling.d.ts.map +1 -1
  21. package/dist/hooks/subagent-fanout-ceiling.js +106 -92
  22. package/dist/hooks/subagent-fanout-ceiling.js.map +1 -1
  23. package/dist/hooks/system-overlay.d.ts +6 -0
  24. package/dist/hooks/system-overlay.d.ts.map +1 -0
  25. package/dist/hooks/system-overlay.js +40 -0
  26. package/dist/hooks/system-overlay.js.map +1 -0
  27. package/dist/hooks/tool-surface-observation.d.ts +14 -0
  28. package/dist/hooks/tool-surface-observation.d.ts.map +1 -0
  29. package/dist/hooks/tool-surface-observation.js +30 -0
  30. package/dist/hooks/tool-surface-observation.js.map +1 -0
  31. package/dist/hooks/workspace-listing.js +3 -3
  32. package/dist/hooks/workspace-listing.js.map +1 -1
  33. package/dist/index.d.ts +9 -6
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +9 -81
  36. package/dist/index.js.map +1 -1
  37. package/dist/plugin-id.d.ts +2 -0
  38. package/dist/plugin-id.d.ts.map +1 -0
  39. package/dist/plugin-id.js +2 -0
  40. package/dist/plugin-id.js.map +1 -0
  41. package/dist/plugin.d.ts +4 -0
  42. package/dist/plugin.d.ts.map +1 -0
  43. package/dist/plugin.js +86 -0
  44. package/dist/plugin.js.map +1 -0
  45. package/dist/runtime-events.d.ts +17 -0
  46. package/dist/runtime-events.d.ts.map +1 -0
  47. package/dist/runtime-events.js +39 -0
  48. package/dist/runtime-events.js.map +1 -0
  49. package/package.json +12 -17
  50. package/{plugin.mjs → plugin/xema-runtime-bridge/index.js} +7770 -2857
  51. package/plugin/xema-runtime-bridge/package.json +8 -0
  52. package/dist/hooks/session-idle-autocommit.d.ts +0 -11
  53. package/dist/hooks/session-idle-autocommit.d.ts.map +0 -1
  54. package/dist/hooks/session-idle-autocommit.js +0 -206
  55. package/dist/hooks/session-idle-autocommit.js.map +0 -1
  56. package/dist/hooks/system-prompt-overlay.d.ts +0 -3
  57. package/dist/hooks/system-prompt-overlay.d.ts.map +0 -1
  58. package/dist/hooks/system-prompt-overlay.js +0 -30
  59. package/dist/hooks/system-prompt-overlay.js.map +0 -1
  60. package/dist/opencode-types.d.ts +0 -69
  61. package/dist/opencode-types.d.ts.map +0 -1
  62. package/dist/opencode-types.js +0 -4
  63. package/dist/opencode-types.js.map +0 -1
  64. package/dist/plugin-entry.d.ts +0 -2
  65. package/dist/plugin-entry.d.ts.map +0 -1
  66. package/dist/plugin-entry.js +0 -2
  67. package/dist/plugin-entry.js.map +0 -1
  68. package/dist/session-state.d.ts +0 -20
  69. package/dist/session-state.d.ts.map +0 -1
  70. package/dist/session-state.js +0 -43
  71. package/dist/session-state.js.map +0 -1
  72. package/dist/tools/runtime.d.ts +0 -2
  73. package/dist/tools/runtime.d.ts.map +0 -1
  74. package/dist/tools/runtime.js +0 -2
  75. package/dist/tools/runtime.js.map +0 -1
  76. package/dist/tools/service-token.d.ts +0 -3
  77. package/dist/tools/service-token.d.ts.map +0 -1
  78. package/dist/tools/service-token.js +0 -31
  79. package/dist/tools/service-token.js.map +0 -1
  80. package/dist/tools/shared.d.ts +0 -3
  81. package/dist/tools/shared.d.ts.map +0 -1
  82. package/dist/tools/shared.js +0 -11
  83. package/dist/tools/shared.js.map +0 -1
  84. package/dist/tools/xema-memory.d.ts +0 -31
  85. package/dist/tools/xema-memory.d.ts.map +0 -1
  86. package/dist/tools/xema-memory.js +0 -157
  87. 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":"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"}
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,2 @@
1
+ export declare const XEMA_RUNTIME_BRIDGE_PLUGIN_ID = "xema-runtime-bridge";
2
+ //# sourceMappingURL=plugin-id.d.ts.map
@@ -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,2 @@
1
+ export const XEMA_RUNTIME_BRIDGE_PLUGIN_ID = 'xema-runtime-bridge';
2
+ //# sourceMappingURL=plugin-id.js.map
@@ -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"}
@@ -0,0 +1,4 @@
1
+ import type { Plugin } from '@opencode/plugin';
2
+ declare const plugin: Plugin.Plugin;
3
+ export default plugin;
4
+ //# sourceMappingURL=plugin.d.ts.map
@@ -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":"AAsCA,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AACjG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAI/D,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IACvD,gBAAgB;IAChB,qBAAqB;IACrB,eAAe;IACf,eAAe;CAChB,CAAC,CAAC;AAEH,KAAK,UAAU,KAAK,CAAC,GAAmB;IACtC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;IACzC,MAAM,KAAK,GAAG,0BAA0B,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,2BAA2B,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,wBAAwB,CAAC;QAC9C,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YACnC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAChE,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAClE,CAAC,CAAC,OAAO,CAAC,QAAQ;gBAClB,CAAC,CAAC,SAAS,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,sBAAsB,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,kBAAkB,CAAC;QACjB,QAAQ;QACR,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;KACxE,CAAC,CAAC;IAEL,MAAM,aAAa,GAAG;QACpB,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACpE,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,6BAA6B,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC9C,MAAM,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CACtF;QACD,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QACvF,CAAC,CAAC;QACF,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;KACrD,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;QACzB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBACxE,WAAW,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1B,IAAI,CACF,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;oBAC5F,0FAA0F,CAC7F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,EAAE,CAAC;IAEL,SAAS,WAAW,CAAC,KAAc;QACjC,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;QACxD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,KAAK,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3D,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,cAAc,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9F,CAAC;IAED,MAAM,OAAO,EAAE,CAAC;IAChB,IAAI,CACF,UAAU,6BAA6B,oBAAoB,GAAG,CAAC,GAAG,CAAC,OAAO,SAAS,SAAS,IAAI;QAC9F,oCAAoC,KAAK,oBAAoB,QAAQ,GAAG,CAC3E,CAAC;IAEF,OAAO,KAAK,IAAI,EAAE;QAChB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;QACD,MAAM,MAAM,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAkB,EAAE,EAAE,EAAE,6BAA6B,EAAE,KAAK,EAAE,CAAC;AAE3E,eAAe,MAAM,CAAC"}
@@ -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.2.0",
4
- "description": "Opencode plugin providing Xema-namespaced runtime tools (xema_memory_*), the dynamic system-prompt overlay hook, and the sub-agent fan-out ceiling.",
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.mjs"
23
+ "plugin"
24
24
  ],
25
25
  "peerDependencies": {
26
- "@opencode-ai/plugin": "^1.0.0",
27
- "zod": "^4.0.0",
28
- "@xemahq/kernel-contracts": ">=12.0.0"
26
+ "@opencode/plugin": "2.0.20"
27
+ },
28
+ "dependencies": {
29
+ "zod": "^4.3.6"
29
30
  },
30
31
  "devDependencies": {
31
- "@opencode-ai/plugin": "^1.15.10",
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.mjs": "./plugin.mjs",
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.mjs",
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": "esbuild src/plugin-entry.ts --bundle --platform=node --target=node22 --format=esm --external:@opencode-ai/plugin --log-level=info --outfile=plugin.mjs",
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
  }