@x-otto/orchestration-contracts 0.0.1-alpha.2 → 0.0.1-alpha.3
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 +1 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @x-otto/orchestration-contracts
|
|
2
2
|
|
|
3
|
-
> orchestrator↔tools
|
|
3
|
+
> orchestrator↔tools type contracts. Type-only package — the only runtime exports are `MODEL_SLOTS`, `checkDelegationDepth`, and `createTodoStore`.
|
|
4
4
|
|
|
5
5
|
`@x-otto/orchestration-contracts` defines the callback port types between the orchestrator execution kernel (`@x-otto/orchestrator`) and the tools adapter layer (`@x-otto/tools`). It provides `TaskStatus`, `Result<T>`, `TodoItem`, 8 callback function signatures (TaskDispatch, CallAgent, WriteTodos, etc.), and the MODEL_SLOTS constant. Both sides `import type`, avoiding a circular dependency.
|
|
6
6
|
|
package/dist/index.d.ts
CHANGED
|
@@ -38,12 +38,21 @@ interface WorkflowOptions {
|
|
|
38
38
|
retry?: {
|
|
39
39
|
enabled?: boolean;
|
|
40
40
|
maxAttempts?: number;
|
|
41
|
+
backoffMs?: number;
|
|
42
|
+
backoffMultiplier?: number;
|
|
41
43
|
};
|
|
42
44
|
circuitBreaker?: {
|
|
43
45
|
enabled?: boolean;
|
|
44
46
|
failureThreshold?: number;
|
|
45
47
|
timeoutMs?: number;
|
|
46
48
|
};
|
|
49
|
+
/** RFC-398 M4:治理参数(并发/容量/深度/扇出)。 */
|
|
50
|
+
orchestration?: {
|
|
51
|
+
maxActiveTasks?: number;
|
|
52
|
+
maxStoredTasks?: number;
|
|
53
|
+
maxDelegationDepth?: number;
|
|
54
|
+
maxFanOutPerParent?: number;
|
|
55
|
+
};
|
|
47
56
|
}
|
|
48
57
|
//#endregion
|
|
49
58
|
//#region src/callbacks.d.ts
|
|
@@ -115,9 +124,28 @@ interface DelegationDepthCheck {
|
|
|
115
124
|
exceeded: boolean;
|
|
116
125
|
}
|
|
117
126
|
declare function checkDelegationDepth(depth: number | undefined, max: number): DelegationDepthCheck;
|
|
127
|
+
/**
|
|
128
|
+
* 子代理完成后 todo 自动同步的**规则单源**(RFC-422 D1:消除投影器与宿主两侧的镜像副本)。
|
|
129
|
+
*
|
|
130
|
+
* 规则逻辑:
|
|
131
|
+
* - taskIds 显式非空 → 返回其中在 todos 里存在且未 done 的 id;
|
|
132
|
+
* - taskIds 空/缺省 → 找 todos 里 in_progress 项,恰好 1 个 → 返回 [它],否则空数组;
|
|
133
|
+
* - 返回空数组 = 不需要同步。
|
|
134
|
+
*
|
|
135
|
+
* 调用方各自操作各自的数据源(宿主用持久层快照、投影器用事件流状态),tracked/mode 等前置
|
|
136
|
+
* 过滤由调用方负责——本函数只管 targetIds 的选取逻辑,不管数据从哪来。
|
|
137
|
+
*
|
|
138
|
+
* 消费方:
|
|
139
|
+
* - 宿主侧 `tools/orchestration/dispatched-task.ts` 的 `syncTodosOnSubagentComplete`
|
|
140
|
+
* - 投影器侧 `session-contract/src/project.ts` 的 `applyDelegateTodoSync`
|
|
141
|
+
*/
|
|
142
|
+
declare function resolveTodoSyncTargets(todos: {
|
|
143
|
+
id?: string;
|
|
144
|
+
status?: string;
|
|
145
|
+
}[], taskIds?: string[]): string[];
|
|
118
146
|
//#endregion
|
|
119
147
|
//#region src/todo-store.d.ts
|
|
120
148
|
declare function createTodoStore(): WriteTodos;
|
|
121
149
|
//#endregion
|
|
122
|
-
export { type BackgroundOutput, type CallAgent, type CancelBackground, type DelegationDepthCheck, type DispatchOutcome, type GetBackgroundOutput, type GetTask, type GetTaskData, type ListTasks, MODEL_SLOTS, type ModelSlotName, type Result, type SessionMode, type TaskBrief, type TaskDispatch, type TaskMode, type TaskStatus, type TodoItem, type TodoStatus, type UpdateTask, type WorkflowOptions, type WriteTodos, checkDelegationDepth, createTodoStore };
|
|
150
|
+
export { type BackgroundOutput, type CallAgent, type CancelBackground, type DelegationDepthCheck, type DispatchOutcome, type GetBackgroundOutput, type GetTask, type GetTaskData, type ListTasks, MODEL_SLOTS, type ModelSlotName, type Result, type SessionMode, type TaskBrief, type TaskDispatch, type TaskMode, type TaskStatus, type TodoItem, type TodoStatus, type UpdateTask, type WorkflowOptions, type WriteTodos, checkDelegationDepth, createTodoStore, resolveTodoSyncTargets };
|
|
123
151
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/primitives.ts","../src/callbacks.ts","../src/delegation.ts","../src/todo-store.ts"],"mappings":";;;KAEY,UAAA;;cAGC,WAAA;AAAA,KACD,aAAA,WAAwB,WAAA;AAAA,KAExB,WAAA;AAAA,KAEA,QAAA;;AALZ;;;;KAYY,MAAA;EAAc,EAAA;EAAU,KAAA,EAAO,CAAA;AAAA;EAAQ,EAAA;EAAW,KAAA;AAAA;AAAA,UAE7C,eAAA;EACf,EAAA;EACA,MAAA,EAAQ,UAAA;EACR,MAAA;AAAA;AAAA,UAGe,SAAA;EACf,EAAA;EACA,MAAA;EACA,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGO,gBAAA;EACf,MAAA,EAAQ,UAAA;EACR,MAAA;AAAA;;UAIe,eAAA;EACf,KAAA;IAAU,OAAA;IAAmB,WAAA;EAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/primitives.ts","../src/callbacks.ts","../src/delegation.ts","../src/todo-store.ts"],"mappings":";;;KAEY,UAAA;;cAGC,WAAA;AAAA,KACD,aAAA,WAAwB,WAAA;AAAA,KAExB,WAAA;AAAA,KAEA,QAAA;;AALZ;;;;KAYY,MAAA;EAAc,EAAA;EAAU,KAAA,EAAO,CAAA;AAAA;EAAQ,EAAA;EAAW,KAAA;AAAA;AAAA,UAE7C,eAAA;EACf,EAAA;EACA,MAAA,EAAQ,UAAA;EACR,MAAA;AAAA;AAAA,UAGe,SAAA;EACf,EAAA;EACA,MAAA;EACA,MAAA,EAAQ,UAAA;AAAA;AAAA,UAGO,gBAAA;EACf,MAAA,EAAQ,UAAA;EACR,MAAA;AAAA;;UAIe,eAAA;EACf,KAAA;IAAU,OAAA;IAAmB,WAAA;IAAsB,SAAA;IAAoB,iBAAA;EAAA;EACvE,cAAA;IAAmB,OAAA;IAAmB,gBAAA;IAA2B,SAAA;EAAA;EAlBzD;EAoBR,aAAA;IACE,cAAA;IACA,cAAA;IACA,kBAAA;IACA,kBAAA;EAAA;AAAA;;;KCjCQ,YAAA,IAAgB,IAAA;EAC1B,MAAA;EACA,QAAA;EACA,QAAA;EACA,IAAA,EAAM,QAAA;EACN,SAAA;EACA,WAAA,GAAc,WAAA;EACd,IAAA,GAAO,aAAA,EDdkF;ECgBzF,KAAA,WDhByF;ECkBzF,KAAA;EDjBU;;;;;AAEZ;ECsBE,YAAA;EAEA,MAAA,GAAS,WAAA;AAAA,MACL,OAAA,CAAQ,MAAA,CAAO,eAAA;AAAA,KAET,SAAA,IACV,KAAA,UACA,MAAA;;AAEA,OAAA;EACE,IAAA,GAAO,aAAA;EACP,KAAA;EACA,KAAA;EACA,MAAA,GAAS,WAAA,ED1BK;EC4Bd,YAAA;AAAA,MAEC,OAAA,CAAQ,MAAA;AAAA,KAED,WAAA;EACV,EAAA;EACA,MAAA,EAAQ,UAAA;EACR,MAAA;EACA,MAAA;EACA,KAAA;AAAA;AAAA,KAGU,OAAA,IAAW,EAAA,aAAe,OAAA,CAAQ,MAAA,CAAO,WAAA;AAAA,KAEzC,SAAA,IAAa,MAAA,GAAS,UAAA,aAAuB,OAAA,CAAQ,MAAA,CAAO,SAAA;AAAA,KAE5D,UAAA,IAAc,EAAA,UAAY,MAAA,yBAA+B,OAAA,CAAQ,MAAA;AAAA,KAEjE,mBAAA,IAAuB,EAAA,aAAe,OAAA,CAAQ,MAAA,CAAO,gBAAA;AAAA,KAErD,gBAAA,IAAoB,EAAA,aAAe,OAAA,CAAQ,MAAA;;KAG3C,UAAA,IAAc,IAAA;EACxB,KAAA;EACA,MAAA;EACA,KAAA,EAAO,QAAA;EACP,SAAA;AAAA,MACI,OAAA,CAAQ,MAAA,CAAO,QAAA;;;;;;ADvErB;;;;;AAGA;;;;UEOiB,oBAAA;EFNL;EEQV,UAAA;;EAEA,QAAA;AAAA;AAAA,iBAGc,oBAAA,CAAqB,KAAA,sBAA2B,GAAA,WAAc,oBAAA;;;;;AFT9E;;;;;AAOA;;;;;;iBEsBgB,sBAAA,CACd,KAAA;EAAS,EAAA;EAAa,MAAA;AAAA,KACtB,OAAA;;;iBCpCc,eAAA,CAAA,GAAmB,UAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=[`normal`,`thinking`,`compact`,`critique`,`vision`];function t(e,t){let n=(e??0)+1;return{childDepth:n,exceeded:n>t}}function n(){let e=new Map;return async({action:t,todos:n,sessionId:r})=>{let i=r?.trim()||`__default__`,a=e.get(i)??[];if(t===`set`)a=[...n];else{let e=new Map(a.map(e=>[e.id,e]));for(let t of n)e.set(t.id,t);a=[...e.values()]}return e.set(i,a),{ok:!0,value:a}}}export{e as MODEL_SLOTS,t as checkDelegationDepth,n as
|
|
1
|
+
const e=[`normal`,`thinking`,`compact`,`critique`,`vision`];function t(e,t){let n=(e??0)+1;return{childDepth:n,exceeded:n>t}}function n(e,t){if(t&&t.length>0)return t.filter(t=>e.some(e=>e.id===t&&e.status!==`done`));let n=e.filter(e=>e.status===`in_progress`);if(n.length===1){let e=n[0].id;return e==null?[]:[e]}return[]}function r(){let e=new Map;return async({action:t,todos:n,sessionId:r})=>{let i=r?.trim()||`__default__`,a=e.get(i)??[];if(t===`set`)a=[...n];else{let e=new Map(a.map(e=>[e.id,e]));for(let t of n)e.set(t.id,t);a=[...e.values()]}return e.set(i,a),{ok:!0,value:a}}}export{e as MODEL_SLOTS,t as checkDelegationDepth,r as createTodoStore,n as resolveTodoSyncTargets};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/primitives.ts","../src/delegation.ts","../src/todo-store.ts"],"sourcesContent":["export type { TodoStatus, TodoItem } from '@x-otto/interchange'\n\nexport type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'\n\n/** 模型槽位词表(单一真源)——`ai.WORKFLOW_SLOTS` 从此派生、`setting` 直取,消 split-brain。 */\nexport const MODEL_SLOTS = ['normal', 'thinking', 'compact', 'critique', 'vision'] as const\nexport type ModelSlotName = (typeof MODEL_SLOTS)[number]\n\nexport type SessionMode = 'ephemeral' | 'sticky'\n\nexport type TaskMode = 'sync' | 'background'\n\n/**\n * 领域结果判别联合(RFC-004 D36 §4-15)。\n * 跨包契约不再泄漏 `{success,output,error}` UI 软字典:成功携领域值 `value`,失败携人读 `error`。\n * 软字典只允许出现在面向 LLM 的 tools 适配层(把 Result 投影为 ToolResult 文案/isError)。\n */\nexport type Result<T> = { ok: true; value: T } | { ok: false; error: string }\n\nexport interface DispatchOutcome {\n id: string\n status: TaskStatus\n output?: string\n}\n\nexport interface TaskBrief {\n id: string\n prompt: string\n status: TaskStatus\n}\n\nexport interface BackgroundOutput {\n status: TaskStatus\n output?: string\n}\n\n/** 编排工作流配置(M-B3 单源——consumed by orchestrator & setting)。 */\nexport interface WorkflowOptions {\n retry?: { enabled?: boolean; maxAttempts?: number }\n circuitBreaker?: { enabled?: boolean; failureThreshold?: number; timeoutMs?: number }\n}\n","/**\n * 委派深度护栏单源(RFC-057 M90-01 / §6 规则 5 / §10 C14)。\n *\n * `childDepth = (depth ?? 0) + 1`;`exceeded = childDepth > max`。\n * 三处调用点共用,消字节级重复:\n * - orchestrator `dispatchTask`(task_delegate sync/background)\n * - orchestrator `callAgent`(agent_call 轻量旁路)\n * - tools `fork_call`(字节继承旁路)\n *\n * 注意(§10 C14):本轴是「跨委派深度」(一个 agent 能向子 agent 委派多少层,默认 max=1),\n * 与 swarm `MAX_NESTING_DEPTH=5`(team 内部嵌套递归轴)是**同名不同概念**,不得并入。\n */\nexport interface DelegationDepthCheck {\n /** 子委派的深度(父 depth + 1),传给被委派会话。 */\n childDepth: number\n /** childDepth 是否越过 max(越过则应拒绝委派)。 */\n exceeded: boolean\n}\n\nexport function checkDelegationDepth(depth: number | undefined, max: number): DelegationDepthCheck {\n const childDepth = (depth ?? 0) + 1\n return { childDepth, exceeded: childDepth > max }\n}\n","import type { TodoItem } from './primitives'\nimport type { WriteTodos } from './callbacks'\n\n// orchestration-contracts/src/todo-store.ts — Session-level Todo store.\n// Extracted from orchestrator.ts (endgame architecture review O2).\nexport function createTodoStore(): WriteTodos {\n const storeBySession = new Map<string, TodoItem[]>()\n\n return async ({ action, todos, sessionId }) => {\n const sessionKey = sessionId?.trim() || '__default__'\n let store = storeBySession.get(sessionKey) ?? []\n\n if (action === 'set') {\n store = [...todos]\n } else {\n const map = new Map(store.map((t) => [t.id, t]))\n for (const todo of todos) {\n map.set(todo.id, todo)\n }\n store = [...map.values()]\n }\n\n storeBySession.set(sessionKey, store)\n return { ok: true, value: store }\n }\n}\n"],"mappings":"AAKA,MAAa,EAAc,CAAC,SAAU,WAAY,UAAW,WAAY,SAAS,CCclF,SAAgB,EAAqB,EAA2B,EAAmC,CACjG,IAAM,GAAc,GAAS,GAAK,EAClC,MAAO,CAAE,aAAY,SAAU,EAAa,EAAK,
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/primitives.ts","../src/delegation.ts","../src/todo-store.ts"],"sourcesContent":["export type { TodoStatus, TodoItem } from '@x-otto/interchange'\n\nexport type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'\n\n/** 模型槽位词表(单一真源)——`ai.WORKFLOW_SLOTS` 从此派生、`setting` 直取,消 split-brain。 */\nexport const MODEL_SLOTS = ['normal', 'thinking', 'compact', 'critique', 'vision'] as const\nexport type ModelSlotName = (typeof MODEL_SLOTS)[number]\n\nexport type SessionMode = 'ephemeral' | 'sticky'\n\nexport type TaskMode = 'sync' | 'background'\n\n/**\n * 领域结果判别联合(RFC-004 D36 §4-15)。\n * 跨包契约不再泄漏 `{success,output,error}` UI 软字典:成功携领域值 `value`,失败携人读 `error`。\n * 软字典只允许出现在面向 LLM 的 tools 适配层(把 Result 投影为 ToolResult 文案/isError)。\n */\nexport type Result<T> = { ok: true; value: T } | { ok: false; error: string }\n\nexport interface DispatchOutcome {\n id: string\n status: TaskStatus\n output?: string\n}\n\nexport interface TaskBrief {\n id: string\n prompt: string\n status: TaskStatus\n}\n\nexport interface BackgroundOutput {\n status: TaskStatus\n output?: string\n}\n\n/** 编排工作流配置(M-B3 单源——consumed by orchestrator & setting)。 */\nexport interface WorkflowOptions {\n retry?: { enabled?: boolean; maxAttempts?: number; backoffMs?: number; backoffMultiplier?: number }\n circuitBreaker?: { enabled?: boolean; failureThreshold?: number; timeoutMs?: number }\n /** RFC-398 M4:治理参数(并发/容量/深度/扇出)。 */\n orchestration?: {\n maxActiveTasks?: number\n maxStoredTasks?: number\n maxDelegationDepth?: number\n maxFanOutPerParent?: number\n }\n}\n","/**\n * 委派深度护栏单源(RFC-057 M90-01 / §6 规则 5 / §10 C14)。\n *\n * `childDepth = (depth ?? 0) + 1`;`exceeded = childDepth > max`。\n * 三处调用点共用,消字节级重复:\n * - orchestrator `dispatchTask`(task_delegate sync/background)\n * - orchestrator `callAgent`(agent_call 轻量旁路)\n * - tools `fork_call`(字节继承旁路)\n *\n * 注意(§10 C14):本轴是「跨委派深度」(一个 agent 能向子 agent 委派多少层,默认 max=1),\n * 与 swarm `MAX_NESTING_DEPTH=5`(team 内部嵌套递归轴)是**同名不同概念**,不得并入。\n */\nexport interface DelegationDepthCheck {\n /** 子委派的深度(父 depth + 1),传给被委派会话。 */\n childDepth: number\n /** childDepth 是否越过 max(越过则应拒绝委派)。 */\n exceeded: boolean\n}\n\nexport function checkDelegationDepth(depth: number | undefined, max: number): DelegationDepthCheck {\n const childDepth = (depth ?? 0) + 1\n return { childDepth, exceeded: childDepth > max }\n}\n\n/**\n * 子代理完成后 todo 自动同步的**规则单源**(RFC-422 D1:消除投影器与宿主两侧的镜像副本)。\n *\n * 规则逻辑:\n * - taskIds 显式非空 → 返回其中在 todos 里存在且未 done 的 id;\n * - taskIds 空/缺省 → 找 todos 里 in_progress 项,恰好 1 个 → 返回 [它],否则空数组;\n * - 返回空数组 = 不需要同步。\n *\n * 调用方各自操作各自的数据源(宿主用持久层快照、投影器用事件流状态),tracked/mode 等前置\n * 过滤由调用方负责——本函数只管 targetIds 的选取逻辑,不管数据从哪来。\n *\n * 消费方:\n * - 宿主侧 `tools/orchestration/dispatched-task.ts` 的 `syncTodosOnSubagentComplete`\n * - 投影器侧 `session-contract/src/project.ts` 的 `applyDelegateTodoSync`\n */\nexport function resolveTodoSyncTargets(\n todos: { id?: string; status?: string }[],\n taskIds?: string[],\n): string[] {\n if (taskIds && taskIds.length > 0) {\n return taskIds.filter((id) => todos.some((t) => t.id === id && t.status !== 'done'))\n }\n const inProgress = todos.filter((t) => t.status === 'in_progress')\n if (inProgress.length === 1) {\n const id = inProgress[0]!.id\n return id != null ? [id] : []\n }\n return []\n}\n","import type { TodoItem } from './primitives'\nimport type { WriteTodos } from './callbacks'\n\n// orchestration-contracts/src/todo-store.ts — Session-level Todo store.\n// Extracted from orchestrator.ts (endgame architecture review O2).\nexport function createTodoStore(): WriteTodos {\n const storeBySession = new Map<string, TodoItem[]>()\n\n return async ({ action, todos, sessionId }) => {\n const sessionKey = sessionId?.trim() || '__default__'\n let store = storeBySession.get(sessionKey) ?? []\n\n if (action === 'set') {\n store = [...todos]\n } else {\n const map = new Map(store.map((t) => [t.id, t]))\n for (const todo of todos) {\n map.set(todo.id, todo)\n }\n store = [...map.values()]\n }\n\n storeBySession.set(sessionKey, store)\n return { ok: true, value: store }\n }\n}\n"],"mappings":"AAKA,MAAa,EAAc,CAAC,SAAU,WAAY,UAAW,WAAY,SAAS,CCclF,SAAgB,EAAqB,EAA2B,EAAmC,CACjG,IAAM,GAAc,GAAS,GAAK,EAClC,MAAO,CAAE,aAAY,SAAU,EAAa,EAAK,CAkBnD,SAAgB,EACd,EACA,EACU,CACV,GAAI,GAAW,EAAQ,OAAS,EAC9B,OAAO,EAAQ,OAAQ,GAAO,EAAM,KAAM,GAAM,EAAE,KAAO,GAAM,EAAE,SAAW,OAAO,CAAC,CAEtF,IAAM,EAAa,EAAM,OAAQ,GAAM,EAAE,SAAW,cAAc,CAClE,GAAI,EAAW,SAAW,EAAG,CAC3B,IAAM,EAAK,EAAW,GAAI,GAC1B,OAAO,GAAM,KAAc,EAAE,CAAT,CAAC,EAAG,CAE1B,MAAO,EAAE,CC9CX,SAAgB,GAA8B,CAC5C,IAAM,EAAiB,IAAI,IAE3B,OAAO,MAAO,CAAE,SAAQ,QAAO,eAAgB,CAC7C,IAAM,EAAa,GAAW,MAAM,EAAI,cACpC,EAAQ,EAAe,IAAI,EAAW,EAAI,EAAE,CAEhD,GAAI,IAAW,MACb,EAAQ,CAAC,GAAG,EAAM,KACb,CACL,IAAM,EAAM,IAAI,IAAI,EAAM,IAAK,GAAM,CAAC,EAAE,GAAI,EAAE,CAAC,CAAC,CAChD,IAAK,IAAM,KAAQ,EACjB,EAAI,IAAI,EAAK,GAAI,EAAK,CAExB,EAAQ,CAAC,GAAG,EAAI,QAAQ,CAAC,CAI3B,OADA,EAAe,IAAI,EAAY,EAAM,CAC9B,CAAE,GAAI,GAAM,MAAO,EAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@x-otto/orchestration-contracts",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.3",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist"
|
|
6
6
|
],
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"tag": "alpha"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@x-otto/interchange": "0.1.0-alpha.
|
|
22
|
+
"@x-otto/interchange": "0.1.0-alpha.7"
|
|
23
23
|
},
|
|
24
24
|
"private": false,
|
|
25
25
|
"scripts": {
|