@wukonglabs/wukong 0.0.8 → 0.0.10

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 (70) hide show
  1. package/dist/cli/exit-codes.js +12 -16
  2. package/dist/cli/exit-codes.js.map +1 -1
  3. package/dist/cli/help.d.ts.map +1 -1
  4. package/dist/cli/help.js +10 -9
  5. package/dist/cli/help.js.map +1 -1
  6. package/dist/cli/session-commands.d.ts +28 -0
  7. package/dist/cli/session-commands.d.ts.map +1 -0
  8. package/dist/cli/session-commands.js +274 -0
  9. package/dist/cli/session-commands.js.map +1 -0
  10. package/dist/cli/summary.js +2 -6
  11. package/dist/cli/summary.js.map +1 -1
  12. package/dist/cli/workspace-commands.d.ts +15 -0
  13. package/dist/cli/workspace-commands.d.ts.map +1 -0
  14. package/dist/cli/workspace-commands.js +98 -0
  15. package/dist/cli/workspace-commands.js.map +1 -0
  16. package/dist/index.js +429 -131
  17. package/dist/index.js.map +1 -1
  18. package/dist/sigint-handler.d.ts +62 -0
  19. package/dist/sigint-handler.d.ts.map +1 -0
  20. package/dist/sigint-handler.js +62 -0
  21. package/dist/sigint-handler.js.map +1 -0
  22. package/dist/tui/app.d.ts +57 -0
  23. package/dist/tui/app.d.ts.map +1 -0
  24. package/dist/tui/app.js +194 -0
  25. package/dist/tui/app.js.map +1 -0
  26. package/dist/tui/header.d.ts +24 -0
  27. package/dist/tui/header.d.ts.map +1 -0
  28. package/dist/tui/header.js +26 -0
  29. package/dist/tui/header.js.map +1 -0
  30. package/dist/tui/permission-card.d.ts +27 -0
  31. package/dist/tui/permission-card.d.ts.map +1 -0
  32. package/dist/tui/permission-card.js +75 -0
  33. package/dist/tui/permission-card.js.map +1 -0
  34. package/dist/tui/plan-panel.d.ts +29 -0
  35. package/dist/tui/plan-panel.d.ts.map +1 -0
  36. package/dist/tui/plan-panel.js +26 -0
  37. package/dist/tui/plan-panel.js.map +1 -0
  38. package/dist/tui/response-panel.d.ts +49 -0
  39. package/dist/tui/response-panel.d.ts.map +1 -0
  40. package/dist/tui/response-panel.js +13 -0
  41. package/dist/tui/response-panel.js.map +1 -0
  42. package/dist/tui/run-ink.d.ts +22 -0
  43. package/dist/tui/run-ink.d.ts.map +1 -0
  44. package/dist/tui/run-ink.js +31 -0
  45. package/dist/tui/run-ink.js.map +1 -0
  46. package/dist/tui/should-use-tui.d.ts +25 -0
  47. package/dist/tui/should-use-tui.d.ts.map +1 -0
  48. package/dist/tui/should-use-tui.js +29 -0
  49. package/dist/tui/should-use-tui.js.map +1 -0
  50. package/dist/tui/text-input.d.ts +52 -0
  51. package/dist/tui/text-input.d.ts.map +1 -0
  52. package/dist/tui/text-input.js +321 -0
  53. package/dist/tui/text-input.js.map +1 -0
  54. package/dist/tui/thinking-panel.d.ts +40 -0
  55. package/dist/tui/thinking-panel.d.ts.map +1 -0
  56. package/dist/tui/thinking-panel.js +54 -0
  57. package/dist/tui/thinking-panel.js.map +1 -0
  58. package/dist/tui/tool-cards.d.ts +30 -0
  59. package/dist/tui/tool-cards.d.ts.map +1 -0
  60. package/dist/tui/tool-cards.js +34 -0
  61. package/dist/tui/tool-cards.js.map +1 -0
  62. package/dist/tui/use-input-history.d.ts +40 -0
  63. package/dist/tui/use-input-history.d.ts.map +1 -0
  64. package/dist/tui/use-input-history.js +123 -0
  65. package/dist/tui/use-input-history.js.map +1 -0
  66. package/dist/tui/use-plan-state.d.ts +4 -0
  67. package/dist/tui/use-plan-state.d.ts.map +1 -0
  68. package/dist/tui/use-plan-state.js +73 -0
  69. package/dist/tui/use-plan-state.js.map +1 -0
  70. package/package.json +7 -2
@@ -0,0 +1,123 @@
1
+ /**
2
+ * 输入历史 hook —— 提供 readline 历史导航 + Ctrl+R 反查。
3
+ *
4
+ * ## 交互
5
+ *
6
+ * - **上下键**:浏览历史(和 readline / bash 一致)
7
+ * - 上键:回到更早的历史项;到顶不动
8
+ * - 下键:回到更近的历史项;到底恢复为"编辑中"的草稿
9
+ * - 浏览中按其他键修改 → 视为在新草稿上编辑(下次按上键回到当前选中)
10
+ * - **Ctrl+R**:进入反查模式
11
+ * - 输入字符 → 实时过滤匹配的最近一条历史
12
+ * - 再按 Ctrl+R → 跳到下一条匹配
13
+ * - Enter / Esc / 非 Ctrl+R 编辑键 → 退出反查模式(Enter 提交当前匹配)
14
+ *
15
+ * ## 持久化
16
+ *
17
+ * 本 hook 只维护**进程内**历史。跨 session 持久化(读 `~/.wukong/history`)
18
+ * 由调用方负责,见 `tui/app.tsx`。
19
+ *
20
+ * ## 设计取舍
21
+ *
22
+ * 不引第三方库(如 ink-use-input-history)的原因:这些库大多没覆盖 Ctrl+R,
23
+ * 且与我们的"草稿保留 + 反查"语义不完全一致;自研约 120 行,可控性更好。
24
+ */
25
+ import { useState, useCallback, useRef, useEffect } from 'react';
26
+ export function useInputHistory(initial = []) {
27
+ const [entries, setEntries] = useState(initial);
28
+ const [navIndex, setNavIndex] = useState(null);
29
+ const draftRef = useRef('');
30
+ const [draftBeforeNav, setDraftBeforeNav] = useState('');
31
+ const push = useCallback((entry) => {
32
+ const trimmed = entry.trim();
33
+ if (!trimmed)
34
+ return;
35
+ setEntries((prev) => {
36
+ // 与最后一条相同则不重复
37
+ if (prev.length > 0 && prev[prev.length - 1] === trimmed)
38
+ return prev;
39
+ // 上限 1000 条,避免无限增长
40
+ const next = [...prev, trimmed];
41
+ return next.length > 1000 ? next.slice(next.length - 1000) : next;
42
+ });
43
+ }, []);
44
+ const navigate = useCallback((direction, currentDraft) => {
45
+ if (entries.length === 0)
46
+ return null;
47
+ // 进入导航前保存草稿
48
+ if (navIndex === null) {
49
+ draftRef.current = currentDraft;
50
+ setDraftBeforeNav(currentDraft);
51
+ }
52
+ if (direction === 'up') {
53
+ // 上键:navIndex 从 null → entries.length-1,否则 -1
54
+ const nextIdx = navIndex === null ? entries.length - 1 : Math.max(0, navIndex - 1);
55
+ setNavIndex(nextIdx);
56
+ return entries[nextIdx] ?? null;
57
+ }
58
+ else {
59
+ // 下键:到底恢复草稿
60
+ if (navIndex === null)
61
+ return null;
62
+ const nextIdx = navIndex + 1;
63
+ if (nextIdx >= entries.length) {
64
+ setNavIndex(null);
65
+ return draftRef.current;
66
+ }
67
+ setNavIndex(nextIdx);
68
+ return entries[nextIdx] ?? null;
69
+ }
70
+ }, [entries, navIndex]);
71
+ const exitNavigation = useCallback(() => {
72
+ setNavIndex(null);
73
+ }, []);
74
+ // entries 外部更新(initial 变化)时重置导航
75
+ useEffect(() => {
76
+ setNavIndex(null);
77
+ }, [entries]);
78
+ return {
79
+ entries,
80
+ push,
81
+ navIndex,
82
+ navigate,
83
+ exitNavigation,
84
+ draftBeforeNav,
85
+ };
86
+ }
87
+ /**
88
+ * 在历史中从 `fromIndex`(含)向更早的方向找第一条包含 `query` 的条目。
89
+ *
90
+ * @param entries 历史条目(末尾为最新)
91
+ * @param query 查询子串(大小写不敏感)
92
+ * @param fromIndex 从哪个索引开始往前找(含);默认从末尾开始
93
+ * @returns 匹配结果;无匹配返回 { index: -1, text: '' }
94
+ */
95
+ export function reverseSearch(entries, query, fromIndex = entries.length - 1) {
96
+ if (!query || entries.length === 0)
97
+ return { index: -1, text: '' };
98
+ const q = query.toLowerCase();
99
+ for (let i = Math.min(fromIndex, entries.length - 1); i >= 0; i--) {
100
+ if (entries[i].toLowerCase().includes(q)) {
101
+ return { index: i, text: entries[i] };
102
+ }
103
+ }
104
+ return { index: -1, text: '' };
105
+ }
106
+ /**
107
+ * 跳到当前匹配之前的下一条匹配(用于"再按 Ctrl+R")。
108
+ *
109
+ * @param entries 历史条目
110
+ * @param query 查询子串
111
+ * @param currentIndex 当前匹配的索引
112
+ * @returns 新的匹配结果;无更早匹配时返回原 currentIndex 的结果
113
+ */
114
+ export function reverseSearchNext(entries, query, currentIndex) {
115
+ if (currentIndex <= 0) {
116
+ // 已经是最早的匹配,返回当前
117
+ if (currentIndex < 0)
118
+ return { index: -1, text: '' };
119
+ return { index: currentIndex, text: entries[currentIndex] };
120
+ }
121
+ return reverseSearch(entries, query, currentIndex - 1);
122
+ }
123
+ //# sourceMappingURL=use-input-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-input-history.js","sourceRoot":"","sources":["../../src/tui/use-input-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBjE,MAAM,UAAU,eAAe,CAAC,UAAoB,EAAE;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAW,OAAO,CAAC,CAAC;IAC1D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,MAAM,CAAS,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAS,EAAE,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE;YAClB,cAAc;YACd,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;gBAAE,OAAO,IAAI,CAAC;YACtE,mBAAmB;YACnB,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YAChC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,QAAQ,GAAG,WAAW,CAC1B,CAAC,SAAwB,EAAE,YAAoB,EAAiB,EAAE;QAChE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,YAAY;QACZ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC;YAChC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,8CAA8C;YAC9C,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;YACnF,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,YAAY;YACZ,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,MAAM,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC7B,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC9B,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC1B,CAAC;YACD,WAAW,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;QAClC,CAAC;IACH,CAAC,EACD,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CAAC;IAEF,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO;QACL,OAAO;QACP,IAAI;QACJ,QAAQ;QACR,QAAQ;QACR,cAAc;QACd,cAAc;KACf,CAAC;AACJ,CAAC;AAaD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAiB,EACjB,KAAa,EACb,YAAoB,OAAO,CAAC,MAAM,GAAG,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACnE,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClE,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAiB,EACjB,KAAa,EACb,YAAoB;IAEpB,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,gBAAgB;QAChB,IAAI,YAAY,GAAG,CAAC;YAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IAC9D,CAAC;IACD,OAAO,aAAa,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { EventBus } from '@wukonglabs/wukong-agent-sdk';
2
+ import type { TodoItem } from './plan-panel.js';
3
+ export declare function usePlanState(eventBus: EventBus): TodoItem[];
4
+ //# sourceMappingURL=use-plan-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-plan-state.d.ts","sourceRoot":"","sources":["../../src/tui/use-plan-state.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAc,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAkD3D"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * usePlanState —— 订阅 EventBus 的 plan_update 事件,维护 todos 列表。
3
+ *
4
+ * 这是 PlanPanel 的容器逻辑(事件 → state),与 PlanPanel(纯展示)分离。
5
+ *
6
+ * ## 事件映射
7
+ *
8
+ * - add: 新增 todo(同 id 不重复)
9
+ * - update: 修改 content / status
10
+ * - complete: 标记为 completed
11
+ * - remove: 删除单个(有 todoId)或清空全部(无 todoId)
12
+ *
13
+ * ## 测试
14
+ *
15
+ * 由于 hook 依赖 React + EventBus,单测里用 @testing-library/react-hooks 的 renderHook。
16
+ * 本项目暂不引入该依赖,故 hook 通过 App 集成测试间接覆盖;
17
+ * 纯展示组件 PlanPanel 的单测覆盖所有渲染分支。
18
+ */
19
+ import { useState, useEffect } from 'react';
20
+ export function usePlanState(eventBus) {
21
+ const [todos, setTodos] = useState([]);
22
+ useEffect(() => {
23
+ const unsub = eventBus.on((event) => {
24
+ if (event.type !== 'plan_update')
25
+ return;
26
+ const { action, todoId, content, status } = event.data;
27
+ setTodos((prev) => {
28
+ switch (action) {
29
+ case 'add': {
30
+ if (!todoId)
31
+ return prev;
32
+ if (prev.some((t) => t.id === todoId))
33
+ return prev;
34
+ return [
35
+ ...prev,
36
+ {
37
+ id: todoId,
38
+ content: content ?? '(未命名)',
39
+ status: status ?? 'pending',
40
+ },
41
+ ];
42
+ }
43
+ case 'update': {
44
+ if (!todoId)
45
+ return prev;
46
+ return prev.map((t) => t.id === todoId
47
+ ? {
48
+ ...t,
49
+ ...(content !== undefined ? { content } : {}),
50
+ ...(status !== undefined ? { status } : {}),
51
+ }
52
+ : t);
53
+ }
54
+ case 'complete': {
55
+ if (!todoId)
56
+ return prev;
57
+ return prev.map((t) => (t.id === todoId ? { ...t, status: 'completed' } : t));
58
+ }
59
+ case 'remove': {
60
+ if (!todoId)
61
+ return [];
62
+ return prev.filter((t) => t.id !== todoId);
63
+ }
64
+ default:
65
+ return prev;
66
+ }
67
+ });
68
+ });
69
+ return unsub;
70
+ }, [eventBus]);
71
+ return todos;
72
+ }
73
+ //# sourceMappingURL=use-plan-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-plan-state.js","sourceRoot":"","sources":["../../src/tui/use-plan-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,UAAU,YAAY,CAAC,QAAkB;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IAEnD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAiB,EAAE,EAAE;YAC9C,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;gBAAE,OAAO;YACzC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;YACvD,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChB,QAAQ,MAAM,EAAE,CAAC;oBACf,KAAK,KAAK,CAAC,CAAC,CAAC;wBACX,IAAI,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAC;wBACzB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;4BAAE,OAAO,IAAI,CAAC;wBACnD,OAAO;4BACL,GAAG,IAAI;4BACP;gCACE,EAAE,EAAE,MAAM;gCACV,OAAO,EAAE,OAAO,IAAI,OAAO;gCAC3B,MAAM,EAAE,MAAM,IAAI,SAAS;6BAC5B;yBACF,CAAC;oBACJ,CAAC;oBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,IAAI,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAC;wBACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,CAAC,CAAC,EAAE,KAAK,MAAM;4BACb,CAAC,CAAC;gCACE,GAAG,CAAC;gCACJ,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC7C,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC5C;4BACH,CAAC,CAAC,CAAC,CACN,CAAC;oBACJ,CAAC;oBACD,KAAK,UAAU,CAAC,CAAC,CAAC;wBAChB,IAAI,CAAC,MAAM;4BAAE,OAAO,IAAI,CAAC;wBACzB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChF,CAAC;oBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;wBACd,IAAI,CAAC,MAAM;4BAAE,OAAO,EAAE,CAAC;wBACvB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;oBAC7C,CAAC;oBACD;wBACE,OAAO,IAAI,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "name": "@wukonglabs/wukong",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "description": "CI-First AI Agent CLI — 极简但功能完整的 AI 编程助手(ReAct 循环 + 内置工具 + 技能系统)",
5
5
  "bin": {
6
6
  "wukong": "dist/index.js"
7
7
  },
8
+ "type": "module",
8
9
  "files": [
9
10
  "dist",
10
11
  "wukong.json"
@@ -31,10 +32,14 @@
31
32
  ],
32
33
  "license": "MIT",
33
34
  "dependencies": {
34
- "@wukonglabs/wukong-agent-sdk": "0.0.8"
35
+ "ink": "^5.2.1",
36
+ "react": "^18.3.1",
37
+ "@wukonglabs/wukong-agent-sdk": "0.0.10"
35
38
  },
36
39
  "devDependencies": {
37
40
  "@types/node": "^25.3.2",
41
+ "@types/react": "^18.3.31",
42
+ "ink-testing-library": "^4.0.0",
38
43
  "typescript": "^5.9.3",
39
44
  "vitest": "^4.0.18"
40
45
  },