@testany/hephos 0.3.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 (99) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +79 -0
  3. package/out/LocalExecutionEnvironment.d.ts +23 -0
  4. package/out/LocalExecutionEnvironment.d.ts.map +1 -0
  5. package/out/LocalExecutionEnvironment.js +124 -0
  6. package/out/LocalExecutionEnvironment.js.map +1 -0
  7. package/out/adapters/AdapterFactory.d.ts +55 -0
  8. package/out/adapters/AdapterFactory.d.ts.map +1 -0
  9. package/out/adapters/AdapterFactory.js +117 -0
  10. package/out/adapters/AdapterFactory.js.map +1 -0
  11. package/out/adapters/ClaudeCodeAdapter.d.ts +28 -0
  12. package/out/adapters/ClaudeCodeAdapter.d.ts.map +1 -0
  13. package/out/adapters/ClaudeCodeAdapter.js +95 -0
  14. package/out/adapters/ClaudeCodeAdapter.js.map +1 -0
  15. package/out/adapters/GenericShellAdapter.d.ts +51 -0
  16. package/out/adapters/GenericShellAdapter.d.ts.map +1 -0
  17. package/out/adapters/GenericShellAdapter.js +162 -0
  18. package/out/adapters/GenericShellAdapter.js.map +1 -0
  19. package/out/adapters/OpenAICodexAdapter.d.ts +36 -0
  20. package/out/adapters/OpenAICodexAdapter.d.ts.map +1 -0
  21. package/out/adapters/OpenAICodexAdapter.js +155 -0
  22. package/out/adapters/OpenAICodexAdapter.js.map +1 -0
  23. package/out/adapters/index.d.ts +12 -0
  24. package/out/adapters/index.d.ts.map +1 -0
  25. package/out/adapters/index.js +12 -0
  26. package/out/adapters/index.js.map +1 -0
  27. package/out/cli-layer-index.d.ts +14 -0
  28. package/out/cli-layer-index.d.ts.map +1 -0
  29. package/out/cli-layer-index.js +15 -0
  30. package/out/cli-layer-index.js.map +1 -0
  31. package/out/cli.d.ts +8 -0
  32. package/out/cli.d.ts.map +1 -0
  33. package/out/cli.js +297 -0
  34. package/out/cli.js.map +1 -0
  35. package/out/commands/AgentsCommand.d.ts +47 -0
  36. package/out/commands/AgentsCommand.d.ts.map +1 -0
  37. package/out/commands/AgentsCommand.js +487 -0
  38. package/out/commands/AgentsCommand.js.map +1 -0
  39. package/out/config/ConfigAdapter.d.ts +58 -0
  40. package/out/config/ConfigAdapter.d.ts.map +1 -0
  41. package/out/config/ConfigAdapter.js +95 -0
  42. package/out/config/ConfigAdapter.js.map +1 -0
  43. package/out/config/UIPreferences.d.ts +24 -0
  44. package/out/config/UIPreferences.d.ts.map +1 -0
  45. package/out/config/UIPreferences.js +18 -0
  46. package/out/config/UIPreferences.js.map +1 -0
  47. package/out/config/index.d.ts +9 -0
  48. package/out/config/index.d.ts.map +1 -0
  49. package/out/config/index.js +9 -0
  50. package/out/config/index.js.map +1 -0
  51. package/out/outputs/ConsoleLogger.d.ts +30 -0
  52. package/out/outputs/ConsoleLogger.d.ts.map +1 -0
  53. package/out/outputs/ConsoleLogger.js +54 -0
  54. package/out/outputs/ConsoleLogger.js.map +1 -0
  55. package/out/outputs/ConsoleOutput.d.ts +30 -0
  56. package/out/outputs/ConsoleOutput.d.ts.map +1 -0
  57. package/out/outputs/ConsoleOutput.js +49 -0
  58. package/out/outputs/ConsoleOutput.js.map +1 -0
  59. package/out/outputs/IOutput.d.ts +38 -0
  60. package/out/outputs/IOutput.d.ts.map +1 -0
  61. package/out/outputs/IOutput.js +13 -0
  62. package/out/outputs/IOutput.js.map +1 -0
  63. package/out/outputs/InkOutput.d.ts +24 -0
  64. package/out/outputs/InkOutput.d.ts.map +1 -0
  65. package/out/outputs/InkOutput.js +38 -0
  66. package/out/outputs/InkOutput.js.map +1 -0
  67. package/out/repl/ReplModeInk.d.ts +8 -0
  68. package/out/repl/ReplModeInk.d.ts.map +1 -0
  69. package/out/repl/ReplModeInk.js +1486 -0
  70. package/out/repl/ReplModeInk.js.map +1 -0
  71. package/out/repl/components/AgentsMenu.d.ts +7 -0
  72. package/out/repl/components/AgentsMenu.d.ts.map +1 -0
  73. package/out/repl/components/AgentsMenu.js +565 -0
  74. package/out/repl/components/AgentsMenu.js.map +1 -0
  75. package/out/repl/components/LoadingIndicator.d.ts +5 -0
  76. package/out/repl/components/LoadingIndicator.d.ts.map +1 -0
  77. package/out/repl/components/LoadingIndicator.js +14 -0
  78. package/out/repl/components/LoadingIndicator.js.map +1 -0
  79. package/out/repl/components/QueueDisplay.d.ts +18 -0
  80. package/out/repl/components/QueueDisplay.d.ts.map +1 -0
  81. package/out/repl/components/QueueDisplay.js +16 -0
  82. package/out/repl/components/QueueDisplay.js.map +1 -0
  83. package/out/repl/components/RestorePrompt.d.ts +25 -0
  84. package/out/repl/components/RestorePrompt.d.ts.map +1 -0
  85. package/out/repl/components/RestorePrompt.js +32 -0
  86. package/out/repl/components/RestorePrompt.js.map +1 -0
  87. package/out/repl/components/StreamingDisplay.d.ts +5 -0
  88. package/out/repl/components/StreamingDisplay.d.ts.map +1 -0
  89. package/out/repl/components/StreamingDisplay.js +27 -0
  90. package/out/repl/components/StreamingDisplay.js.map +1 -0
  91. package/out/repl/components/ThinkingIndicator.d.ts +19 -0
  92. package/out/repl/components/ThinkingIndicator.d.ts.map +1 -0
  93. package/out/repl/components/ThinkingIndicator.js +35 -0
  94. package/out/repl/components/ThinkingIndicator.js.map +1 -0
  95. package/out/repl/wizard/wizardStep1Reducer.d.ts +30 -0
  96. package/out/repl/wizard/wizardStep1Reducer.d.ts.map +1 -0
  97. package/out/repl/wizard/wizardStep1Reducer.js +189 -0
  98. package/out/repl/wizard/wizardStep1Reducer.js.map +1 -0
  99. package/package.json +62 -0
@@ -0,0 +1,14 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ export function LoadingIndicator({ message }) {
5
+ const [dots, setDots] = useState('');
6
+ useEffect(() => {
7
+ const interval = setInterval(() => {
8
+ setDots(prev => prev.length >= 3 ? '' : prev + '.');
9
+ }, 500);
10
+ return () => clearInterval(interval);
11
+ }, []);
12
+ return (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: "cyan", children: [message, dots] }) }));
13
+ }
14
+ //# sourceMappingURL=LoadingIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoadingIndicator.js","sourceRoot":"","sources":["../../../src/repl/components/LoadingIndicator.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAMhC,MAAM,UAAU,gBAAgB,CAAC,EAAE,OAAO,EAAyB;IACjE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAErC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;QACtD,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,GAAG,IAAC,OAAO,EAAE,CAAC,YACb,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aAAE,OAAO,EAAE,IAAI,IAAQ,GACrC,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * QueueDisplay - 队列可见性组件
3
+ *
4
+ * 显示当前路由队列状态,让用户了解接下来会轮到谁
5
+ */
6
+ import React from 'react';
7
+ import type { Member } from '@testany/agent-chatter-core';
8
+ interface QueueDisplayProps {
9
+ /** 待处理队列(不含当前执行者) */
10
+ items: Member[];
11
+ /** 当前正在执行的成员(可选,Human 暂停时为 undefined) */
12
+ executing?: Member;
13
+ /** 是否可见 */
14
+ visible: boolean;
15
+ }
16
+ export declare const QueueDisplay: React.FC<QueueDisplayProps>;
17
+ export {};
18
+ //# sourceMappingURL=QueueDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueueDisplay.d.ts","sourceRoot":"","sources":["../../../src/repl/components/QueueDisplay.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,UAAU,iBAAiB;IACzB,qBAAqB;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA4BpD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * QueueDisplay - 队列可见性组件
4
+ *
5
+ * 显示当前路由队列状态,让用户了解接下来会轮到谁
6
+ */
7
+ import React from 'react';
8
+ import { Box, Text } from 'ink';
9
+ export const QueueDisplay = ({ items, executing, visible }) => {
10
+ // 无内容时隐藏
11
+ if (!visible || (!executing && items.length === 0)) {
12
+ return null;
13
+ }
14
+ return (_jsxs(Box, { paddingX: 1, marginBottom: 1, children: [_jsx(Text, { color: "cyan", children: "\uD83D\uDCCB Queue: " }), executing && (_jsxs(Text, { color: "yellow", children: ["[", executing.displayName, " \u23F3]"] })), items.map((member, index) => (_jsxs(React.Fragment, { children: [(executing || index > 0) && _jsx(Text, { color: "gray", children: " \u2192 " }), _jsx(Text, { children: member.displayName })] }, `${member.id}-${index}`)))] }));
15
+ };
16
+ //# sourceMappingURL=QueueDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QueueDisplay.js","sourceRoot":"","sources":["../../../src/repl/components/QueueDisplay.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAYhC,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,KAAK,EACL,SAAS,EACT,OAAO,EACR,EAAE,EAAE;IACH,SAAS;IACT,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,aAC/B,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qCAAkB,EAGnC,SAAS,IAAI,CACZ,MAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAG,SAAS,CAAC,WAAW,gBAAW,CACxD,EAGA,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAC5B,MAAC,KAAK,CAAC,QAAQ,eACZ,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yBAAW,EAC1D,KAAC,IAAI,cAAE,MAAM,CAAC,WAAW,GAAQ,KAFd,GAAG,MAAM,CAAC,EAAE,IAAI,KAAK,EAAE,CAG3B,CAClB,CAAC,IACE,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * RestorePrompt - Session restore prompt component
3
+ *
4
+ * Displays when a previous session is detected and asks user
5
+ * whether to resume or start fresh.
6
+ */
7
+ import React from 'react';
8
+ import type { SessionSummary } from '@testany/agent-chatter-core';
9
+ export interface RestorePromptProps {
10
+ session: SessionSummary;
11
+ teamName: string;
12
+ }
13
+ /**
14
+ * Format time ago string
15
+ */
16
+ export declare function formatTimeAgo(isoDate: string): string;
17
+ /**
18
+ * RestorePrompt component
19
+ *
20
+ * Shows session info and prompts user to choose:
21
+ * - [R] Resume the previous session
22
+ * - [N] Start a new session
23
+ */
24
+ export declare function RestorePrompt({ session, teamName }: RestorePromptProps): React.ReactElement;
25
+ //# sourceMappingURL=RestorePrompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestorePrompt.d.ts","sourceRoot":"","sources":["../../../src/repl/components/RestorePrompt.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAarD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,KAAK,CAAC,YAAY,CA+B3F"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ /**
4
+ * Format time ago string
5
+ */
6
+ export function formatTimeAgo(isoDate) {
7
+ const date = new Date(isoDate);
8
+ const now = new Date();
9
+ const diffMs = now.getTime() - date.getTime();
10
+ const minutes = Math.floor(diffMs / 60000);
11
+ const hours = Math.floor(minutes / 60);
12
+ const days = Math.floor(hours / 24);
13
+ if (days > 0)
14
+ return `${days} day${days > 1 ? 's' : ''} ago`;
15
+ if (hours > 0)
16
+ return `${hours} hour${hours > 1 ? 's' : ''} ago`;
17
+ if (minutes > 0)
18
+ return `${minutes} minute${minutes > 1 ? 's' : ''} ago`;
19
+ return 'just now';
20
+ }
21
+ /**
22
+ * RestorePrompt component
23
+ *
24
+ * Shows session info and prompts user to choose:
25
+ * - [R] Resume the previous session
26
+ * - [N] Start a new session
27
+ */
28
+ export function RestorePrompt({ session, teamName }) {
29
+ const timeAgo = formatTimeAgo(session.updatedAt);
30
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: "Found previous session for team '" }), _jsx(Text, { color: "cyan", bold: true, children: teamName }), _jsx(Text, { color: "yellow", children: "'" })] }), _jsx(Box, { marginLeft: 2, marginTop: 1, children: _jsxs(Text, { dimColor: true, children: [timeAgo, ", ", session.messageCount, " message", session.messageCount !== 1 ? 's' : ''] }) }), session.summary && (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, italic: true, children: ["\"", session.summary, "\""] }) })), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "green", children: "[R]" }), _jsx(Text, { children: " Resume " }), _jsx(Text, { color: "yellow", children: "[N]" }), _jsx(Text, { children: " Start New" })] })] }));
31
+ }
32
+ //# sourceMappingURL=RestorePrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestorePrompt.js","sourceRoot":"","sources":["../../../src/repl/components/RestorePrompt.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAQhC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAE9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAC7D,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACjE,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,UAAU,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACzE,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAsB;IACrE,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEjD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kDAAyC,EAC7D,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,kBAAE,QAAQ,GAAQ,EACzC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAS,IACzB,EAEN,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,YAC9B,MAAC,IAAI,IAAC,QAAQ,mBACX,OAAO,QAAI,OAAO,CAAC,YAAY,cAAU,OAAO,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAC1E,GACH,EAEL,OAAO,CAAC,OAAO,IAAI,CAClB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,MAAC,IAAI,IAAC,QAAQ,QAAC,MAAM,yBAAG,OAAO,CAAC,OAAO,UAAS,GAC5C,CACP,EAED,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,oBAAW,EAC9B,KAAC,IAAI,4BAAiB,EACtB,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,oBAAW,EAC/B,KAAC,IAAI,6BAAkB,IACnB,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AgentEvent } from '@testany/agent-chatter-core';
2
+ export declare function StreamingDisplay({ events }: {
3
+ events: AgentEvent[];
4
+ }): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=StreamingDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingDisplay.d.ts","sourceRoot":"","sources":["../../../src/repl/components/StreamingDisplay.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAqB9D,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,UAAU,EAAE,CAAA;CAAE,2CAcpE"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ function formatLine(event) {
4
+ switch (event.type) {
5
+ case 'session.started':
6
+ return { label: `session started (${event.agentId})`, color: 'cyan' };
7
+ case 'text':
8
+ return { label: event.text, color: event.role === 'assistant' ? 'white' : 'gray' };
9
+ case 'tool.started':
10
+ return { label: `[tool:start] ${event.toolName ?? ''}`, color: 'yellow' };
11
+ case 'tool.completed':
12
+ return { label: `[tool:done] ${event.toolId ?? ''} ${event.output ?? ''}`, color: 'green' };
13
+ case 'turn.completed':
14
+ return { label: `turn completed (${event.finishReason})`, color: event.finishReason === 'done' ? 'green' : 'magenta' };
15
+ case 'error':
16
+ return { label: `error: ${event.error}`, color: 'red' };
17
+ default:
18
+ return { label: '', color: 'white' };
19
+ }
20
+ }
21
+ export function StreamingDisplay({ events }) {
22
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", padding: 1, marginY: 1, children: [_jsx(Text, { color: "cyan", children: "Streaming events" }), events.slice(-6).map(ev => {
23
+ const line = formatLine(ev);
24
+ return (_jsx(Text, { color: line.color, children: line.label }, ev.eventId));
25
+ })] }));
26
+ }
27
+ //# sourceMappingURL=StreamingDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StreamingDisplay.js","sourceRoot":"","sources":["../../../src/repl/components/StreamingDisplay.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGhC,SAAS,UAAU,CAAC,KAAiB;IACnC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,iBAAiB;YACpB,OAAO,EAAE,KAAK,EAAE,oBAAoB,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACxE,KAAK,MAAM;YACT,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACrF,KAAK,cAAc;YACjB,OAAO,EAAE,KAAK,EAAE,gBAAgB,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC5E,KAAK,gBAAgB;YACnB,OAAO,EAAE,KAAK,EAAE,eAAe,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC9F,KAAK,gBAAgB;YACnB,OAAO,EAAE,KAAK,EAAE,mBAAmB,KAAK,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACzH,KAAK,OAAO;YACV,OAAO,EAAE,KAAK,EAAE,UAAU,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1D;YACE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAA4B;IACnE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,WAAW,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,aACvF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,iCAAwB,EACzC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACzB,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC5B,OAAO,CACL,KAAC,IAAI,IAAkB,KAAK,EAAE,IAAI,CAAC,KAAK,YACrC,IAAI,CAAC,KAAK,IADF,EAAE,CAAC,OAAO,CAEd,CACR,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * ThinkingIndicator - Displays agent execution status with timer
3
+ *
4
+ * Shows:
5
+ * - Agent name and status
6
+ * - Elapsed time in seconds
7
+ * - ESC cancellation hint (if enabled)
8
+ * - Maximum timeout warning
9
+ */
10
+ import React from 'react';
11
+ import type { Member } from '@testany/agent-chatter-core';
12
+ interface ThinkingIndicatorProps {
13
+ member: Member;
14
+ maxTimeoutMs: number;
15
+ allowEscCancel: boolean;
16
+ }
17
+ export declare const ThinkingIndicator: React.FC<ThinkingIndicatorProps>;
18
+ export {};
19
+ //# sourceMappingURL=ThinkingIndicator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThinkingIndicator.d.ts","sourceRoot":"","sources":["../../../src/repl/components/ThinkingIndicator.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,UAAU,sBAAsB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA6C9D,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * ThinkingIndicator - Displays agent execution status with timer
4
+ *
5
+ * Shows:
6
+ * - Agent name and status
7
+ * - Elapsed time in seconds
8
+ * - ESC cancellation hint (if enabled)
9
+ * - Maximum timeout warning
10
+ */
11
+ import { useState, useEffect } from 'react';
12
+ import { Box, Text } from 'ink';
13
+ export const ThinkingIndicator = ({ member, maxTimeoutMs, allowEscCancel }) => {
14
+ const [elapsedSeconds, setElapsedSeconds] = useState(0);
15
+ useEffect(() => {
16
+ const startTime = Date.now();
17
+ setElapsedSeconds(0); // Reset timer when agent changes
18
+ const interval = setInterval(() => {
19
+ const elapsed = Math.floor((Date.now() - startTime) / 1000);
20
+ setElapsedSeconds(elapsed);
21
+ }, 1000);
22
+ return () => clearInterval(interval);
23
+ }, [member.id]); // Reset timer whenever agent changes
24
+ const maxMinutes = Math.floor(maxTimeoutMs / 60000);
25
+ const formatTime = (seconds) => {
26
+ if (seconds < 60) {
27
+ return `${seconds}s`;
28
+ }
29
+ const mins = Math.floor(seconds / 60);
30
+ const secs = seconds % 60;
31
+ return `${mins}m ${secs}s`;
32
+ };
33
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "\u23F3 " }), _jsx(Text, { bold: true, children: member.displayName }), _jsx(Text, { color: "dim", children: " is thinking... " }), _jsx(Text, { color: "yellow", children: formatTime(elapsedSeconds) })] }), _jsxs(Box, { marginLeft: 2, children: [allowEscCancel && (_jsx(Text, { color: "dim", children: "Press ESC to cancel | " })), _jsxs(Text, { color: "dim", children: ["Max timeout: ", maxMinutes, " minutes"] })] })] }));
34
+ };
35
+ //# sourceMappingURL=ThinkingIndicator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThinkingIndicator.js","sourceRoot":"","sources":["../../../src/repl/components/ThinkingIndicator.tsx"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAShC,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,MAAM,EACN,YAAY,EACZ,cAAc,EACf,EAAE,EAAE;IACH,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAE,iCAAiC;QAExD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;YAC5D,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,EAAE,IAAI,CAAC,CAAC;QAET,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,qCAAqC;IAEvD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;QAC7C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,GAAG,CAAC;QACvB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC;QAC1B,OAAO,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC;IAC7B,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wBAAU,EAC5B,KAAC,IAAI,IAAC,IAAI,kBAAE,MAAM,CAAC,WAAW,GAAQ,EACtC,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,iCAAwB,EACzC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,YAAE,UAAU,CAAC,cAAc,CAAC,GAAQ,IACpD,EACN,MAAC,GAAG,IAAC,UAAU,EAAE,CAAC,aACf,cAAc,IAAI,CACjB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,uCAA8B,CAChD,EACD,MAAC,IAAI,IAAC,KAAK,EAAC,KAAK,8BAAe,UAAU,gBAAgB,IACtD,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { RoleDefinition } from '@testany/agent-chatter-core';
2
+ export interface MemberAssignment {
3
+ memberIndex: number;
4
+ assignedRole: string;
5
+ }
6
+ export interface WizardStep1Data {
7
+ teamName?: string;
8
+ teamDescription?: string;
9
+ teamInstructionFile?: string;
10
+ roleDefinitions?: RoleDefinition[];
11
+ members?: MemberAssignment[];
12
+ maxRounds?: number;
13
+ _roleCount?: number;
14
+ _currentRoleIndex?: number;
15
+ _memberCount?: number;
16
+ _currentMemberIndex?: number;
17
+ }
18
+ export type WizardStep1EventType = 'info' | 'prompt' | 'error' | 'divider';
19
+ export interface WizardStep1Event {
20
+ type: WizardStep1EventType;
21
+ message?: string;
22
+ char?: string;
23
+ }
24
+ export interface WizardStep1ReducerResult {
25
+ data: WizardStep1Data;
26
+ events: WizardStep1Event[];
27
+ stepCompleted: boolean;
28
+ }
29
+ export declare function processWizardStep1Input(data: WizardStep1Data, rawInput: string): WizardStep1ReducerResult;
30
+ //# sourceMappingURL=wizardStep1Reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardStep1Reducer.d.ts","sourceRoot":"","sources":["../../../src/repl/wizard/wizardStep1Reducer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAmCD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,GACf,wBAAwB,CAgN1B"}
@@ -0,0 +1,189 @@
1
+ import path from 'path';
2
+ const divider = (char = '═') => ({
3
+ type: 'divider',
4
+ char,
5
+ });
6
+ const info = (message) => ({
7
+ type: 'info',
8
+ message,
9
+ });
10
+ const prompt = (message) => ({
11
+ type: 'prompt',
12
+ message,
13
+ });
14
+ const errorEvent = (message) => ({
15
+ type: 'error',
16
+ message,
17
+ });
18
+ const cloneRoles = (roles) => roles ? roles.map(role => ({ ...role })) : undefined;
19
+ const cloneMembers = (members) => members ? members.map(member => ({ ...member })) : undefined;
20
+ const normalizeRoleName = (name) => name.trim().toLowerCase();
21
+ const createRolePlaceholder = () => ({
22
+ name: '',
23
+ description: undefined,
24
+ });
25
+ export function processWizardStep1Input(data, rawInput) {
26
+ const input = rawInput ?? '';
27
+ const trimmedInput = input.trim();
28
+ const events = [];
29
+ // Clone data to avoid mutating original reference
30
+ const nextData = {
31
+ ...data,
32
+ roleDefinitions: cloneRoles(data.roleDefinitions),
33
+ members: cloneMembers(data.members),
34
+ };
35
+ const fail = (message) => ({
36
+ data,
37
+ events: [errorEvent(message)],
38
+ stepCompleted: false,
39
+ });
40
+ // 1. Team name
41
+ if (!nextData.teamName) {
42
+ if (!trimmedInput) {
43
+ return fail('Team name is required');
44
+ }
45
+ nextData.teamName = input;
46
+ events.push(info(`✓ Team name: ${input}`));
47
+ events.push(prompt('Enter team description:'));
48
+ return { data: nextData, events, stepCompleted: false };
49
+ }
50
+ // 2. Team description
51
+ if (!nextData.teamDescription) {
52
+ if (!trimmedInput) {
53
+ return fail('Team description is required');
54
+ }
55
+ nextData.teamDescription = input;
56
+ events.push(info(`✓ Description: ${input}`));
57
+ events.push(prompt('Enter team instruction file path (or press Enter for default):'));
58
+ return { data: nextData, events, stepCompleted: false };
59
+ }
60
+ // 3. Instruction file
61
+ if (!nextData.teamInstructionFile) {
62
+ const defaultPath = `./teams/${nextData.teamName}/team_instruction.md`;
63
+ const filePath = trimmedInput || defaultPath;
64
+ const absolutePath = path.resolve(filePath);
65
+ nextData.teamInstructionFile = absolutePath;
66
+ events.push(info(`✓ Instruction file: ${absolutePath}`));
67
+ events.push(prompt('How many roles do you need? (e.g., 2)'));
68
+ return { data: nextData, events, stepCompleted: false };
69
+ }
70
+ const roles = nextData.roleDefinitions ?? [];
71
+ const members = nextData.members ?? [];
72
+ // 4. Role count
73
+ const hasStartedRoles = Array.isArray(nextData.roleDefinitions) && nextData.roleDefinitions.length > 0;
74
+ if (nextData._roleCount === undefined && !hasStartedRoles) {
75
+ const roleCount = parseInt(trimmedInput, 10);
76
+ if (isNaN(roleCount) || roleCount < 1) {
77
+ return fail('Please enter a valid number (at least 1)');
78
+ }
79
+ nextData._roleCount = roleCount;
80
+ nextData._currentRoleIndex = 0;
81
+ nextData.roleDefinitions = [createRolePlaceholder()];
82
+ events.push(info(`✓ Will define ${roleCount} role(s)`));
83
+ events.push(prompt('Role 1 name (e.g., "reviewer"):'));
84
+ return { data: nextData, events, stepCompleted: false };
85
+ }
86
+ // 4.x Role details
87
+ if (nextData._currentRoleIndex !== undefined &&
88
+ nextData._roleCount !== undefined) {
89
+ const currentIndex = nextData._currentRoleIndex;
90
+ const totalRoles = nextData._roleCount;
91
+ if (!nextData.roleDefinitions || !nextData.roleDefinitions[currentIndex]) {
92
+ // Should not happen, but guard and create placeholder
93
+ nextData.roleDefinitions = [
94
+ ...(nextData.roleDefinitions || []),
95
+ createRolePlaceholder(),
96
+ ];
97
+ }
98
+ const currentRole = nextData.roleDefinitions[currentIndex];
99
+ // Collect role name
100
+ if (!currentRole.name) {
101
+ if (!trimmedInput) {
102
+ return fail('Role name is required');
103
+ }
104
+ currentRole.name = input;
105
+ events.push(info(`✓ Role ${currentIndex + 1} name: ${input}`));
106
+ events.push(prompt(`Role ${currentIndex + 1} description (optional, press Enter to skip):`));
107
+ return { data: nextData, events, stepCompleted: false };
108
+ }
109
+ // Collect role description (allow empty string to skip)
110
+ if (currentRole.description === undefined) {
111
+ currentRole.description = input;
112
+ events.push(info(`✓ Role ${currentIndex + 1} description: ${input ? input : '(none)'}`));
113
+ const newIndex = currentIndex + 1;
114
+ if (newIndex < totalRoles) {
115
+ nextData._currentRoleIndex = newIndex;
116
+ nextData.roleDefinitions.push(createRolePlaceholder());
117
+ events.push(prompt(`Role ${newIndex + 1} name:`));
118
+ }
119
+ else {
120
+ nextData._currentRoleIndex = undefined;
121
+ nextData._roleCount = undefined;
122
+ events.push(info('✓ All roles defined!'));
123
+ events.push(prompt('How many team members (AI + Human) in total?'));
124
+ }
125
+ return { data: nextData, events, stepCompleted: false };
126
+ }
127
+ }
128
+ // 5. Member count
129
+ if (nextData._memberCount === undefined) {
130
+ const memberCount = parseInt(trimmedInput, 10);
131
+ if (isNaN(memberCount) || memberCount < 1) {
132
+ return fail('Please enter a valid number (at least 1)');
133
+ }
134
+ nextData._memberCount = memberCount;
135
+ nextData._currentMemberIndex = 0;
136
+ nextData.members = [];
137
+ const rolesList = (nextData.roleDefinitions || [])
138
+ .filter(role => role.name)
139
+ .map(role => role.name)
140
+ .join(', ');
141
+ events.push(info(`✓ Will configure ${memberCount} member(s)`));
142
+ if (rolesList) {
143
+ events.push(info(`Available roles: ${rolesList}`));
144
+ }
145
+ events.push(prompt('Member 1 - Which role? (enter role name)'));
146
+ return { data: nextData, events, stepCompleted: false };
147
+ }
148
+ // 5.x Member assignments
149
+ if (nextData._currentMemberIndex !== undefined &&
150
+ nextData._memberCount !== undefined) {
151
+ const rolesList = nextData.roleDefinitions || [];
152
+ const roleExists = rolesList.some(role => normalizeRoleName(role.name || '') === normalizeRoleName(input));
153
+ if (!roleExists) {
154
+ const availableRoles = rolesList
155
+ .map(role => role.name)
156
+ .filter(Boolean)
157
+ .join(', ');
158
+ return fail(`Invalid role. Available roles: ${availableRoles}`);
159
+ }
160
+ const newMemberIndex = nextData._currentMemberIndex + 1;
161
+ const newMembers = [...(nextData.members || [])];
162
+ newMembers.push({
163
+ memberIndex: newMemberIndex,
164
+ assignedRole: input,
165
+ });
166
+ nextData.members = newMembers;
167
+ events.push(info(`✓ Member ${newMemberIndex} assigned to role: ${input}`));
168
+ if (newMemberIndex < nextData._memberCount) {
169
+ nextData._currentMemberIndex = newMemberIndex;
170
+ events.push(prompt(`Member ${newMemberIndex + 1} - Which role?`));
171
+ return { data: nextData, events, stepCompleted: false };
172
+ }
173
+ // Completed Step 1
174
+ nextData._currentMemberIndex = undefined;
175
+ nextData._memberCount = undefined;
176
+ events.push(divider());
177
+ events.push(info('✓ Step 1 Complete!'));
178
+ events.push(prompt('Moving to Step 2: Detect AI Agents...'));
179
+ events.push(info('(Step 2 full implementation coming in Phase 2)'));
180
+ return { data: nextData, events, stepCompleted: true };
181
+ }
182
+ // Should not reach here
183
+ return {
184
+ data,
185
+ events: [errorEvent('Unexpected input. Please try again.')],
186
+ stepCompleted: false,
187
+ };
188
+ }
189
+ //# sourceMappingURL=wizardStep1Reducer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizardStep1Reducer.js","sourceRoot":"","sources":["../../../src/repl/wizard/wizardStep1Reducer.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@testany/hephos",
3
+ "version": "0.3.0",
4
+ "description": "Hephos - full CLI+REPL bundle for multi-agent conversation orchestration (depends on agent-chatter core)",
5
+ "type": "module",
6
+ "main": "./out/cli.js",
7
+ "bin": {
8
+ "hephos": "./out/cli.js"
9
+ },
10
+ "license": "UNLICENSED",
11
+ "private": false,
12
+ "author": "TestAny.io <support@testany.io>",
13
+ "keywords": [
14
+ "cli",
15
+ "ai",
16
+ "agent",
17
+ "conversation",
18
+ "orchestration",
19
+ "claude",
20
+ "gemini",
21
+ "openai",
22
+ "multi-agent"
23
+ ],
24
+ "engines": {
25
+ "node": ">=20.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@testany/agent-chatter-core": "^1.0.0",
29
+ "chalk": "^5.6.2",
30
+ "commander": "^14.0.2",
31
+ "ink": "npm:@jrichman/ink@^6.4.3",
32
+ "ink-text-input": "^6.0.0",
33
+ "inquirer": "^9.3.8",
34
+ "inquirer-autocomplete-standalone": "^0.8.1",
35
+ "react": "^19.2.0"
36
+ },
37
+ "devDependencies": {
38
+ "@types/node": "^20.0.0",
39
+ "@types/react": "^19.2.5",
40
+ "ink-testing-library": "^4.0.0",
41
+ "typescript": "^5.3.0",
42
+ "vitest": "^4.0.9"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc",
46
+ "build:watch": "tsc --watch",
47
+ "test": "vitest run --passWithNoTests",
48
+ "test:watch": "vitest watch",
49
+ "lint": "eslint src/",
50
+ "lint:fix": "eslint src/ --fix",
51
+ "clean": "rm -rf out",
52
+ "start": "node out/cli.js"
53
+ },
54
+ "files": [
55
+ "out/**/*",
56
+ "LICENSE",
57
+ "README.md"
58
+ ],
59
+ "publishConfig": {
60
+ "access": "public"
61
+ }
62
+ }