actoviq-agent-sdk 0.4.2 → 0.4.5

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 (100) hide show
  1. package/README-zh.md +58 -62
  2. package/README.md +72 -22
  3. package/assets/actoviq-icon.png +0 -0
  4. package/bin/actoviq-gui.js +24 -0
  5. package/dist/src/cli/actoviq-react.js +31 -14
  6. package/dist/src/cli/actoviq-react.js.map +1 -1
  7. package/dist/src/cli/actoviq-tui.js +9 -0
  8. package/dist/src/cli/actoviq-tui.js.map +1 -1
  9. package/dist/src/cli/bridge-interactive-agent.js +94 -15
  10. package/dist/src/cli/bridge-interactive-agent.js.map +1 -1
  11. package/dist/src/cli/version.d.ts +3 -0
  12. package/dist/src/cli/version.d.ts.map +1 -0
  13. package/dist/src/cli/version.js +28 -0
  14. package/dist/src/cli/version.js.map +1 -0
  15. package/dist/src/hooks/userHooks.d.ts +39 -0
  16. package/dist/src/hooks/userHooks.d.ts.map +1 -0
  17. package/dist/src/hooks/userHooks.js +169 -0
  18. package/dist/src/hooks/userHooks.js.map +1 -0
  19. package/dist/src/index.d.ts +2 -0
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +2 -0
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/mcp/mcpServerConfig.d.ts +19 -0
  24. package/dist/src/mcp/mcpServerConfig.d.ts.map +1 -0
  25. package/dist/src/mcp/mcpServerConfig.js +51 -0
  26. package/dist/src/mcp/mcpServerConfig.js.map +1 -0
  27. package/dist/src/memory/projectContext.d.ts +29 -0
  28. package/dist/src/memory/projectContext.d.ts.map +1 -0
  29. package/dist/src/memory/projectContext.js +107 -0
  30. package/dist/src/memory/projectContext.js.map +1 -0
  31. package/dist/src/parity/actoviqBridgeSdk.d.ts +3 -0
  32. package/dist/src/parity/actoviqBridgeSdk.d.ts.map +1 -1
  33. package/dist/src/parity/actoviqBridgeSdk.js +93 -92
  34. package/dist/src/parity/actoviqBridgeSdk.js.map +1 -1
  35. package/dist/src/parity/bridgeConfigs.d.ts +20 -0
  36. package/dist/src/parity/bridgeConfigs.d.ts.map +1 -0
  37. package/dist/src/parity/bridgeConfigs.js +110 -0
  38. package/dist/src/parity/bridgeConfigs.js.map +1 -0
  39. package/dist/src/parity/bridgeEventAdapter.d.ts +20 -0
  40. package/dist/src/parity/bridgeEventAdapter.d.ts.map +1 -0
  41. package/dist/src/parity/bridgeEventAdapter.js +121 -0
  42. package/dist/src/parity/bridgeEventAdapter.js.map +1 -0
  43. package/dist/src/parity/bridgeExecResolver.d.ts +27 -0
  44. package/dist/src/parity/bridgeExecResolver.d.ts.map +1 -0
  45. package/dist/src/parity/bridgeExecResolver.js +95 -0
  46. package/dist/src/parity/bridgeExecResolver.js.map +1 -0
  47. package/dist/src/parity/bridgeProviders.d.ts +132 -0
  48. package/dist/src/parity/bridgeProviders.d.ts.map +1 -0
  49. package/dist/src/parity/bridgeProviders.js +651 -0
  50. package/dist/src/parity/bridgeProviders.js.map +1 -0
  51. package/dist/src/prompts/outputStyles.d.ts +20 -0
  52. package/dist/src/prompts/outputStyles.d.ts.map +1 -0
  53. package/dist/src/prompts/outputStyles.js +35 -0
  54. package/dist/src/prompts/outputStyles.js.map +1 -0
  55. package/dist/src/prompts/systemPrompt.d.ts.map +1 -1
  56. package/dist/src/prompts/systemPrompt.js +9 -1
  57. package/dist/src/prompts/systemPrompt.js.map +1 -1
  58. package/dist/src/router/modelRouter.d.ts +7 -1
  59. package/dist/src/router/modelRouter.d.ts.map +1 -1
  60. package/dist/src/router/modelRouter.js +50 -15
  61. package/dist/src/router/modelRouter.js.map +1 -1
  62. package/dist/src/runtime/agentSession.d.ts +6 -0
  63. package/dist/src/runtime/agentSession.d.ts.map +1 -1
  64. package/dist/src/runtime/agentSession.js +15 -0
  65. package/dist/src/runtime/agentSession.js.map +1 -1
  66. package/dist/src/runtime/bashClassification.d.ts +18 -0
  67. package/dist/src/runtime/bashClassification.d.ts.map +1 -0
  68. package/dist/src/runtime/bashClassification.js +83 -0
  69. package/dist/src/runtime/bashClassification.js.map +1 -0
  70. package/dist/src/team/modelTeam.d.ts +3 -5
  71. package/dist/src/team/modelTeam.d.ts.map +1 -1
  72. package/dist/src/team/modelTeam.js +98 -162
  73. package/dist/src/team/modelTeam.js.map +1 -1
  74. package/dist/src/team/teamRuntime.d.ts +60 -0
  75. package/dist/src/team/teamRuntime.d.ts.map +1 -0
  76. package/dist/src/team/teamRuntime.js +139 -0
  77. package/dist/src/team/teamRuntime.js.map +1 -0
  78. package/dist/src/tools/actoviqCoreTools.d.ts +1 -0
  79. package/dist/src/tools/actoviqCoreTools.d.ts.map +1 -1
  80. package/dist/src/tools/actoviqCoreTools.js +5 -0
  81. package/dist/src/tools/actoviqCoreTools.js.map +1 -1
  82. package/dist/src/tools/planMode/PlanModeTools.d.ts +18 -0
  83. package/dist/src/tools/planMode/PlanModeTools.d.ts.map +1 -0
  84. package/dist/src/tools/planMode/PlanModeTools.js +71 -0
  85. package/dist/src/tools/planMode/PlanModeTools.js.map +1 -0
  86. package/dist/src/tui/actoviqTui.d.ts +3 -0
  87. package/dist/src/tui/actoviqTui.d.ts.map +1 -1
  88. package/dist/src/tui/actoviqTui.js +1468 -91
  89. package/dist/src/tui/actoviqTui.js.map +1 -1
  90. package/dist/src/tui/transcript.d.ts +6 -0
  91. package/dist/src/tui/transcript.d.ts.map +1 -1
  92. package/dist/src/tui/transcript.js +27 -0
  93. package/dist/src/tui/transcript.js.map +1 -1
  94. package/dist/src/types.d.ts +128 -9
  95. package/dist/src/types.d.ts.map +1 -1
  96. package/dist/src/ui/commandSurface.d.ts +13 -0
  97. package/dist/src/ui/commandSurface.d.ts.map +1 -0
  98. package/dist/src/ui/commandSurface.js +100 -0
  99. package/dist/src/ui/commandSurface.js.map +1 -0
  100. package/package.json +9 -3
@@ -0,0 +1,139 @@
1
+ import { getGlobalAgentPool } from './agentPool.js';
2
+ /** Resolve a `$ENV_VAR` apiKey reference; literal keys pass through unchanged. */
3
+ export function resolveApiKey(apiKey) {
4
+ if (!apiKey)
5
+ return undefined;
6
+ if (apiKey.startsWith('$'))
7
+ return process.env[apiKey.slice(1)];
8
+ return apiKey;
9
+ }
10
+ /** Combine the caller's abort signal with a per-call timeout (if set). */
11
+ export function memberSignal(signal, timeoutMs) {
12
+ if (!timeoutMs || timeoutMs <= 0)
13
+ return signal;
14
+ const signals = [signal, AbortSignal.timeout(timeoutMs)].filter((s) => s != null);
15
+ return AbortSignal.any(signals);
16
+ }
17
+ /** Run `fn` over `items` with at most `limit` in flight; preserves input order. */
18
+ export async function mapWithConcurrency(items, limit, fn) {
19
+ const results = new Array(items.length);
20
+ let next = 0;
21
+ const workers = Array.from({ length: Math.max(1, Math.min(limit, items.length)) }, async () => {
22
+ while (true) {
23
+ const i = next++;
24
+ if (i >= items.length)
25
+ return;
26
+ results[i] = await fn(items[i], i);
27
+ }
28
+ });
29
+ await Promise.all(workers);
30
+ return results;
31
+ }
32
+ /** Read-only tool set for expert/reviewer agents (no write/edit/bash/delegation). */
33
+ export async function buildReadOnlyExpertTools(cwd) {
34
+ const { createActoviqFileTools } = await import('../tools/actoviqFileTools.js');
35
+ const { createActoviqWebTools } = await import('../tools/actoviqWebTools.js');
36
+ const { createTavilySearchTool } = await import('../tools/tavilySearch.js');
37
+ const READ_ONLY_FILE_TOOLS = new Set(['Read', 'Glob', 'Grep']);
38
+ return [
39
+ ...createActoviqFileTools({ cwd }).filter((t) => READ_ONLY_FILE_TOOLS.has(t.name)),
40
+ ...createActoviqWebTools().filter((t) => t.name === 'WebFetch'),
41
+ createTavilySearchTool(),
42
+ ];
43
+ }
44
+ /**
45
+ * Assign each member a stable, unique identity for reports/events/status.
46
+ * Preference: explicit id → name → role → model; duplicates get a `#n` suffix so
47
+ * two members sharing a model (the common default) never collide in labels.
48
+ */
49
+ export function buildMemberIdentities(members) {
50
+ const used = new Map();
51
+ return members.map((member) => {
52
+ const base = (member.id ?? member.name ?? member.role ?? member.model ?? 'member').trim() || 'member';
53
+ const seen = used.get(base) ?? 0;
54
+ used.set(base, seen + 1);
55
+ const id = seen === 0 ? base : `${base}#${seen + 1}`;
56
+ return { id, model: member.model, role: member.role };
57
+ });
58
+ }
59
+ /**
60
+ * Validate a member's configuration before running it. Conservative on purpose:
61
+ * it flags only unambiguous misconfigurations (a `$ENV_VAR` apiKey whose variable
62
+ * is unset, or a missing model) so members relying on global credentials still run.
63
+ */
64
+ export function preflightMember(member) {
65
+ if (!member.model || !member.model.trim()) {
66
+ return { ok: false, error: 'no model configured' };
67
+ }
68
+ if (member.apiKey && member.apiKey.startsWith('$') && !process.env[member.apiKey.slice(1)]) {
69
+ return { ok: false, error: `missing environment variable ${member.apiKey.slice(1)} for apiKey` };
70
+ }
71
+ return { ok: true };
72
+ }
73
+ /**
74
+ * The single member runner shared by all team modes. Handles, in one place:
75
+ * - preflight (skips clearly-misconfigured members with a structured status)
76
+ * - AgentPool slot acquire/release
77
+ * - SDK lifecycle (create → stream → close)
78
+ * - progress events (started / per tool.call / completed)
79
+ * - token accounting + tool-call counting
80
+ * - error capture into a structured MemberStatus (never throws)
81
+ */
82
+ export async function runMemberAgent(opts) {
83
+ const { identity, member, task, systemPrompt, cwd, tools, maxIterations, timeoutMs, signal, round, onEvent } = opts;
84
+ const startedAt = Date.now();
85
+ const base = { id: identity.id, model: identity.model, role: identity.role };
86
+ const pre = preflightMember(member);
87
+ if (!pre.ok) {
88
+ const status = { ...base, ok: false, skipped: true, error: pre.error, toolCalls: 0, durationMs: 0 };
89
+ onEvent?.({ type: 'team.member.completed', ...base, round, ok: false, toolCalls: 0, durationMs: 0, error: pre.error });
90
+ return { report: `[unavailable: ${identity.id} — ${pre.error}]`, status, inputTokens: 0, outputTokens: 0 };
91
+ }
92
+ onEvent?.({ type: 'team.member.started', ...base, round });
93
+ const pool = getGlobalAgentPool();
94
+ let slot;
95
+ let sdk;
96
+ try {
97
+ slot = await pool.acquire(timeoutMs);
98
+ const { createAgentSdk } = await import('../runtime/agentClient.js');
99
+ sdk = await createAgentSdk({
100
+ model: member.model,
101
+ provider: member.provider,
102
+ baseURL: member.baseURL,
103
+ authToken: resolveApiKey(member.apiKey),
104
+ maxTokens: member.maxTokens ?? 32000,
105
+ workDir: cwd,
106
+ tools,
107
+ permissionMode: 'bypassPermissions',
108
+ maxToolIterations: maxIterations,
109
+ systemPrompt,
110
+ });
111
+ const stream = sdk.stream(task, { signal: memberSignal(signal, timeoutMs) });
112
+ for await (const event of stream) {
113
+ if (event.type === 'tool.call' && onEvent) {
114
+ onEvent({ type: 'team.member.tool', id: identity.id, model: identity.model, round, tool: event.call.publicName });
115
+ }
116
+ }
117
+ const result = await stream.result;
118
+ const inputTokens = result.requests.reduce((sum, r) => sum + (r.usage?.input_tokens ?? 0), 0);
119
+ const outputTokens = result.requests.reduce((sum, r) => sum + (r.usage?.output_tokens ?? 0), 0);
120
+ const toolCalls = result.toolCalls.length;
121
+ const durationMs = Date.now() - startedAt;
122
+ const status = { ...base, ok: true, toolCalls, durationMs };
123
+ onEvent?.({ type: 'team.member.completed', ...base, round, ok: true, toolCalls, durationMs });
124
+ return { report: result.text, status, inputTokens, outputTokens };
125
+ }
126
+ catch (err) {
127
+ const message = err instanceof Error ? err.message : String(err);
128
+ const durationMs = Date.now() - startedAt;
129
+ const status = { ...base, ok: false, error: message, toolCalls: 0, durationMs };
130
+ onEvent?.({ type: 'team.member.completed', ...base, round, ok: false, toolCalls: 0, durationMs, error: message });
131
+ return { report: `[ERROR: ${identity.id} (${identity.model}) failed — ${message}]`, status, inputTokens: 0, outputTokens: 0 };
132
+ }
133
+ finally {
134
+ if (sdk)
135
+ await sdk.close();
136
+ slot?.release();
137
+ }
138
+ }
139
+ //# sourceMappingURL=teamRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teamRuntime.js","sourceRoot":"","sources":["../../../src/team/teamRuntime.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ export interface ActoviqCoreToolsOptions extends ActoviqFileToolsOptions {
18
18
  bash?: boolean;
19
19
  todoWrite?: boolean;
20
20
  askUserQuestion?: boolean;
21
+ planModeTools?: boolean;
21
22
  webTools?: boolean;
22
23
  taskTools?: boolean;
23
24
  notebookEdit?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"actoviqCoreTools.d.ts","sourceRoot":"","sources":["../../../src/tools/actoviqCoreTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAW7F,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,mBAAmB,EAAE,CAmBvB"}
1
+ {"version":3,"file":"actoviqCoreTools.d.ts","sourceRoot":"","sources":["../../../src/tools/actoviqCoreTools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAA0B,KAAK,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAY7F,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IACtE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,uBAA4B,GACpC,mBAAmB,EAAE,CAuBvB"}
@@ -4,6 +4,7 @@ import { createTavilySearchTool } from './tavilySearch.js';
4
4
  import { createBashTool } from './bash/BashTool.js';
5
5
  import { createTodoWriteTool } from './todo/TodoWriteTool.js';
6
6
  import { createAskUserQuestionTool } from './askUserQuestion/AskUserQuestionTool.js';
7
+ import { createPlanModeTools } from './planMode/PlanModeTools.js';
7
8
  import { createActoviqTaskTools } from './actoviqTaskTools.js';
8
9
  import { createNotebookEditTool } from './actoviqNotebookEdit.js';
9
10
  import { createPowerShellTool } from './actoviqShellTools.js';
@@ -18,6 +19,10 @@ export function createActoviqCoreTools(options = {}) {
18
19
  tools.push(createTodoWriteTool());
19
20
  if (options.askUserQuestion !== false)
20
21
  tools.push(createAskUserQuestionTool());
22
+ // Plan-mode tools let the agent enter/exit planning and present a plan.
23
+ if (options.planModeTools !== false && options.cwd) {
24
+ tools.push(...createPlanModeTools(options.cwd));
25
+ }
21
26
  if (options.webTools !== false) {
22
27
  tools.push(...createActoviqWebTools());
23
28
  // Tavily: enabled when TAVILY_API_KEY is set (no Python dependency)
@@ -1 +1 @@
1
- {"version":3,"file":"actoviqCoreTools.js","sourceRoot":"","sources":["../../../src/tools/actoviqCoreTools.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,sBAAsB,EAAgC,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAa/D,MAAM,UAAU,sBAAsB,CACpC,UAAmC,EAAE;IAErC,MAAM,KAAK,GAA0B;QACnC,GAAG,sBAAsB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAChD,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,qBAAqB,EAAE,CAAC,CAAC;QACvC,oEAAoE;QACpE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC;IAExE,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"actoviqCoreTools.js","sourceRoot":"","sources":["../../../src/tools/actoviqCoreTools.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,sBAAsB,EAAgC,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAc/D,MAAM,UAAU,sBAAsB,CACpC,UAAmC,EAAE;IAErC,MAAM,KAAK,GAA0B;QACnC,GAAG,sBAAsB,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAChD,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;IACzD,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,eAAe,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC/E,wEAAwE;IACxE,IAAI,OAAO,CAAC,aAAa,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,qBAAqB,EAAE,CAAC,CAAC;QACvC,oEAAoE;QACpE,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC;IACzE,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,sBAAsB,EAAE,CAAC,CAAC;IAExE,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { AgentToolDefinition, ActoviqPermissionMode } from '../../types.js';
2
+ export declare const ENTER_PLAN_MODE_TOOL_NAME = "EnterPlanMode";
3
+ export declare const EXIT_PLAN_MODE_TOOL_NAME = "ExitPlanMode";
4
+ export declare const EXIT_PLAN_MODE_PROMPT = "## ExitPlanMode\n\nUse this tool ONLY when you have finished researching and are ready to present a plan. Calling it writes the plan to the project's plan file and signals the user to review it. While in plan mode you must NOT attempt to make changes \u2014 research with read-only tools (Read/Glob/Grep/Bash read-only), then call ExitPlanMode with a concise plan. After the user approves, the plan is the source of truth: implement it, tracking progress with TodoWrite.";
5
+ export interface PlanModeToolContext {
6
+ /** Called when the agent requests entering/exiting plan mode. */
7
+ onPlanModeChange?: (mode: ActoviqPermissionMode) => void;
8
+ /** Per-project plan directory (plan file is written here). */
9
+ planDir?: string;
10
+ }
11
+ export declare function planFilePath(workDir: string): string;
12
+ export declare function readPlanFile(workDir: string): string | null;
13
+ /**
14
+ * Build the two plan-mode tools. EnterPlanMode is read-only; ExitPlanMode is
15
+ * read-only too (it writes only the plan file, never workspace code).
16
+ */
17
+ export declare function createPlanModeTools(workDir: string, ctx?: PlanModeToolContext): AgentToolDefinition[];
18
+ //# sourceMappingURL=PlanModeTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanModeTools.d.ts","sourceRoot":"","sources":["../../../../src/tools/planMode/PlanModeTools.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjF,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AACzD,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,eAAO,MAAM,qBAAqB,2dAE6Z,CAAC;AAEhc,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACzD,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,mBAAwB,GAC5B,mBAAmB,EAAE,CA6CvB"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Plan-mode tools (EnterPlanMode / ExitPlanMode) — give the agent a structured
3
+ * way to research-then-propose before touching code, mirroring Claude Code.
4
+ *
5
+ * In `plan` permission mode the engine already blocks mutating tools; these
6
+ * tools give the agent the *vocabulary* to enter/exit planning and to present
7
+ * its plan. EnterPlanMode flips the session to plan mode; ExitPlanMode writes
8
+ * the plan to a per-project plan file and returns it so the TUI can show it
9
+ * and the user can approve (switching out of plan mode) or revise.
10
+ */
11
+ import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
12
+ import os from 'node:os';
13
+ import path from 'node:path';
14
+ import { z } from 'zod';
15
+ import { tool } from '../../runtime/tools.js';
16
+ export const ENTER_PLAN_MODE_TOOL_NAME = 'EnterPlanMode';
17
+ export const EXIT_PLAN_MODE_TOOL_NAME = 'ExitPlanMode';
18
+ export const EXIT_PLAN_MODE_PROMPT = `## ExitPlanMode
19
+
20
+ Use this tool ONLY when you have finished researching and are ready to present a plan. Calling it writes the plan to the project's plan file and signals the user to review it. While in plan mode you must NOT attempt to make changes — research with read-only tools (Read/Glob/Grep/Bash read-only), then call ExitPlanMode with a concise plan. After the user approves, the plan is the source of truth: implement it, tracking progress with TodoWrite.`;
21
+ function resolvePlanDir(workDir) {
22
+ const projectKey = workDir.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 40) || 'default';
23
+ return path.join(os.homedir(), '.actoviq', 'projects', projectKey);
24
+ }
25
+ export function planFilePath(workDir) {
26
+ return path.join(resolvePlanDir(workDir), 'plan.md');
27
+ }
28
+ export function readPlanFile(workDir) {
29
+ const p = planFilePath(workDir);
30
+ return existsSync(p) ? readFileSync(p, 'utf-8') : null;
31
+ }
32
+ /**
33
+ * Build the two plan-mode tools. EnterPlanMode is read-only; ExitPlanMode is
34
+ * read-only too (it writes only the plan file, never workspace code).
35
+ */
36
+ export function createPlanModeTools(workDir, ctx = {}) {
37
+ const planDir = ctx.planDir ?? resolvePlanDir(workDir);
38
+ const enter = tool({
39
+ name: ENTER_PLAN_MODE_TOOL_NAME,
40
+ description: 'Enter plan mode. Use at the start of a task that needs research before changes — researching, designing, and presenting a plan for approval before any code is written. In plan mode, mutating tools are blocked.',
41
+ inputSchema: z.strictObject({}),
42
+ isReadOnly: () => true,
43
+ prompt: () => `## EnterPlanMode\n\nCall this to enter plan mode for a task that warrants research-then-propose. While in plan mode, you may only read/explore — do not attempt edits. When your plan is ready, call ExitPlanMode.`,
44
+ }, async () => {
45
+ ctx.onPlanModeChange?.('plan');
46
+ return { mode: 'plan', note: 'Entered plan mode. Mutating tools are now blocked. Research, then call ExitPlanMode with your plan.' };
47
+ });
48
+ const exit = tool({
49
+ name: EXIT_PLAN_MODE_TOOL_NAME,
50
+ description: 'Present your plan and exit plan mode. Writes the plan to the project plan file and returns it for user review. Call this only after researching; do not call it to ask open-ended questions.',
51
+ inputSchema: z.strictObject({
52
+ plan: z
53
+ .string()
54
+ .min(1)
55
+ .describe('The full plan: a concise ordered list of steps, the files touched, and key decisions/risks. Markdown.'),
56
+ }),
57
+ isReadOnly: () => true,
58
+ prompt: () => EXIT_PLAN_MODE_PROMPT,
59
+ }, async ({ plan }) => {
60
+ try {
61
+ mkdirSync(planDir, { recursive: true });
62
+ writeFileSync(path.join(planDir, 'plan.md'), plan, 'utf-8');
63
+ }
64
+ catch {
65
+ // best-effort — the plan still returns to the caller
66
+ }
67
+ return { plan, planFile: path.join(planDir, 'plan.md'), note: 'Plan written. The user can review/approve it (via /plan) before implementation.' };
68
+ });
69
+ return [enter, exit];
70
+ }
71
+ //# sourceMappingURL=PlanModeTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlanModeTools.js","sourceRoot":"","sources":["../../../../src/tools/planMode/PlanModeTools.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,8 @@ export interface ActoviqTuiOptions {
19
19
  resumeSessionId?: string;
20
20
  continueMostRecent?: boolean;
21
21
  }
22
+ export declare function renderRichText(text: string, width: number, opts?: {
23
+ maxLines?: number;
24
+ }): string[];
22
25
  export declare function runActoviqTui(options?: ActoviqTuiOptions): Promise<void>;
23
26
  //# sourceMappingURL=actoviqTui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actoviqTui.d.ts","sourceRoot":"","sources":["../../../src/tui/actoviqTui.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAIV,qBAAqB,EAOtB,MAAM,aAAa,CAAC;AA2CrB,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAoBrD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAM3D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAgGD,wBAAsB,aAAa,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CA89DlF"}
1
+ {"version":3,"file":"actoviqTui.d.ts","sourceRoot":"","sources":["../../../src/tui/actoviqTui.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAIV,qBAAqB,EAQtB,MAAM,aAAa,CAAC;AAoErB,eAAO,MAAM,kBAAkB,wBAA+B,CAAC;AAQ/D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAYzC;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAoDD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,EAAE,CAqCtG;AAyED,wBAAsB,aAAa,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqtGlF"}