funolio-agent 0.1.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 (138) hide show
  1. package/README.md +55 -0
  2. package/dist/clerk/index.d.ts +62 -0
  3. package/dist/clerk/index.d.ts.map +1 -0
  4. package/dist/clerk/index.js +186 -0
  5. package/dist/clerk/index.js.map +1 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +42 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/configure.d.ts +2 -0
  11. package/dist/commands/configure.d.ts.map +1 -0
  12. package/dist/commands/configure.js +252 -0
  13. package/dist/commands/configure.js.map +1 -0
  14. package/dist/commands/init.d.ts +6 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +151 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/login.d.ts +6 -0
  19. package/dist/commands/login.d.ts.map +1 -0
  20. package/dist/commands/login.js +170 -0
  21. package/dist/commands/login.js.map +1 -0
  22. package/dist/commands/start.d.ts +8 -0
  23. package/dist/commands/start.d.ts.map +1 -0
  24. package/dist/commands/start.js +179 -0
  25. package/dist/commands/start.js.map +1 -0
  26. package/dist/commands/status.d.ts +2 -0
  27. package/dist/commands/status.d.ts.map +1 -0
  28. package/dist/commands/status.js +55 -0
  29. package/dist/commands/status.js.map +1 -0
  30. package/dist/config.d.ts +46 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +113 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/index.d.ts +24 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +48 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp/index.d.ts +9 -0
  39. package/dist/mcp/index.d.ts.map +1 -0
  40. package/dist/mcp/index.js +15 -0
  41. package/dist/mcp/index.js.map +1 -0
  42. package/dist/mcp/manager.d.ts +83 -0
  43. package/dist/mcp/manager.d.ts.map +1 -0
  44. package/dist/mcp/manager.js +338 -0
  45. package/dist/mcp/manager.js.map +1 -0
  46. package/dist/mcp/registry.d.ts +32 -0
  47. package/dist/mcp/registry.d.ts.map +1 -0
  48. package/dist/mcp/registry.js +139 -0
  49. package/dist/mcp/registry.js.map +1 -0
  50. package/dist/message-loop.d.ts +18 -0
  51. package/dist/message-loop.d.ts.map +1 -0
  52. package/dist/message-loop.js +165 -0
  53. package/dist/message-loop.js.map +1 -0
  54. package/dist/mqtt-client.d.ts +67 -0
  55. package/dist/mqtt-client.d.ts.map +1 -0
  56. package/dist/mqtt-client.js +148 -0
  57. package/dist/mqtt-client.js.map +1 -0
  58. package/dist/providers/anthropic.d.ts +10 -0
  59. package/dist/providers/anthropic.d.ts.map +1 -0
  60. package/dist/providers/anthropic.js +183 -0
  61. package/dist/providers/anthropic.js.map +1 -0
  62. package/dist/providers/google.d.ts +10 -0
  63. package/dist/providers/google.d.ts.map +1 -0
  64. package/dist/providers/google.js +161 -0
  65. package/dist/providers/google.js.map +1 -0
  66. package/dist/providers/index.d.ts +42 -0
  67. package/dist/providers/index.d.ts.map +1 -0
  68. package/dist/providers/index.js +19 -0
  69. package/dist/providers/index.js.map +1 -0
  70. package/dist/providers/openai.d.ts +10 -0
  71. package/dist/providers/openai.d.ts.map +1 -0
  72. package/dist/providers/openai.js +173 -0
  73. package/dist/providers/openai.js.map +1 -0
  74. package/dist/providers/retry.d.ts +6 -0
  75. package/dist/providers/retry.d.ts.map +1 -0
  76. package/dist/providers/retry.js +38 -0
  77. package/dist/providers/retry.js.map +1 -0
  78. package/dist/subagent/index.d.ts +8 -0
  79. package/dist/subagent/index.d.ts.map +1 -0
  80. package/dist/subagent/index.js +14 -0
  81. package/dist/subagent/index.js.map +1 -0
  82. package/dist/subagent/orchestrator.d.ts +67 -0
  83. package/dist/subagent/orchestrator.d.ts.map +1 -0
  84. package/dist/subagent/orchestrator.js +152 -0
  85. package/dist/subagent/orchestrator.js.map +1 -0
  86. package/dist/subagent/queue.d.ts +66 -0
  87. package/dist/subagent/queue.d.ts.map +1 -0
  88. package/dist/subagent/queue.js +298 -0
  89. package/dist/subagent/queue.js.map +1 -0
  90. package/dist/subagent/types.d.ts +76 -0
  91. package/dist/subagent/types.d.ts.map +1 -0
  92. package/dist/subagent/types.js +14 -0
  93. package/dist/subagent/types.js.map +1 -0
  94. package/dist/tools/edit-file.d.ts +3 -0
  95. package/dist/tools/edit-file.d.ts.map +1 -0
  96. package/dist/tools/edit-file.js +112 -0
  97. package/dist/tools/edit-file.js.map +1 -0
  98. package/dist/tools/git-tools.d.ts +5 -0
  99. package/dist/tools/git-tools.d.ts.map +1 -0
  100. package/dist/tools/git-tools.js +144 -0
  101. package/dist/tools/git-tools.js.map +1 -0
  102. package/dist/tools/index.d.ts +40 -0
  103. package/dist/tools/index.d.ts.map +1 -0
  104. package/dist/tools/index.js +126 -0
  105. package/dist/tools/index.js.map +1 -0
  106. package/dist/tools/installer.d.ts +41 -0
  107. package/dist/tools/installer.d.ts.map +1 -0
  108. package/dist/tools/installer.js +227 -0
  109. package/dist/tools/installer.js.map +1 -0
  110. package/dist/tools/list-directory.d.ts +3 -0
  111. package/dist/tools/list-directory.d.ts.map +1 -0
  112. package/dist/tools/list-directory.js +107 -0
  113. package/dist/tools/list-directory.js.map +1 -0
  114. package/dist/tools/read-file.d.ts +3 -0
  115. package/dist/tools/read-file.d.ts.map +1 -0
  116. package/dist/tools/read-file.js +89 -0
  117. package/dist/tools/read-file.js.map +1 -0
  118. package/dist/tools/run-command.d.ts +3 -0
  119. package/dist/tools/run-command.d.ts.map +1 -0
  120. package/dist/tools/run-command.js +86 -0
  121. package/dist/tools/run-command.js.map +1 -0
  122. package/dist/tools/sandbox.d.ts +17 -0
  123. package/dist/tools/sandbox.d.ts.map +1 -0
  124. package/dist/tools/sandbox.js +78 -0
  125. package/dist/tools/sandbox.js.map +1 -0
  126. package/dist/tools/write-file.d.ts +3 -0
  127. package/dist/tools/write-file.d.ts.map +1 -0
  128. package/dist/tools/write-file.js +88 -0
  129. package/dist/tools/write-file.js.map +1 -0
  130. package/dist/types.d.ts +67 -0
  131. package/dist/types.d.ts.map +1 -0
  132. package/dist/types.js +6 -0
  133. package/dist/types.js.map +1 -0
  134. package/dist/verification/index.d.ts +17 -0
  135. package/dist/verification/index.d.ts.map +1 -0
  136. package/dist/verification/index.js +224 -0
  137. package/dist/verification/index.js.map +1 -0
  138. package/package.json +41 -0
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ /**
3
+ * Sandbox utilities: path validation, ensuring operations stay within project directory.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.resolveSandboxed = resolveSandboxed;
40
+ exports.existsInSandbox = existsInSandbox;
41
+ exports.checkFileSize = checkFileSize;
42
+ const path = __importStar(require("path"));
43
+ const fs = __importStar(require("fs"));
44
+ /**
45
+ * Resolve a path relative to the project directory and ensure it doesn't escape.
46
+ * Throws if the resolved path is outside the sandbox.
47
+ */
48
+ function resolveSandboxed(projectDir, filePath) {
49
+ const resolved = path.resolve(projectDir, filePath);
50
+ const normalizedProject = path.resolve(projectDir);
51
+ if (!resolved.startsWith(normalizedProject + path.sep) && resolved !== normalizedProject) {
52
+ throw new Error(`Path "${filePath}" resolves to "${resolved}" which is outside the project directory "${normalizedProject}"`);
53
+ }
54
+ return resolved;
55
+ }
56
+ /**
57
+ * Check if a file exists within the sandbox.
58
+ */
59
+ async function existsInSandbox(projectDir, filePath) {
60
+ try {
61
+ const resolved = resolveSandboxed(projectDir, filePath);
62
+ await fs.promises.access(resolved);
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Validate file size is within limits.
71
+ */
72
+ async function checkFileSize(absolutePath, maxSize) {
73
+ const stat = await fs.promises.stat(absolutePath);
74
+ if (stat.size > maxSize) {
75
+ throw new Error(`File size ${stat.size} bytes exceeds maximum of ${maxSize} bytes (${(maxSize / 1024 / 1024).toFixed(1)}MB)`);
76
+ }
77
+ }
78
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASH,4CAWC;AAKD,0CAQC;AAKD,sCAOC;AA3CD,2CAA6B;AAC7B,uCAAyB;AAEzB;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,UAAkB,EAAE,QAAgB;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,iBAAiB,EAAE,CAAC;QACzF,MAAM,IAAI,KAAK,CACb,SAAS,QAAQ,kBAAkB,QAAQ,6CAA6C,iBAAiB,GAAG,CAC7G,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,QAAgB;IACxE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAe;IACvE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,CAAC,IAAI,6BAA6B,OAAO,WAAW,CAAC,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC7G,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ToolDefinition } from '../types';
2
+ export declare const writeFileTool: ToolDefinition;
3
+ //# sourceMappingURL=write-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAA2B,MAAM,UAAU,CAAC;AAGnE,eAAO,MAAM,aAAa,EAAE,cAmD3B,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.writeFileTool = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const sandbox_1 = require("./sandbox");
40
+ exports.writeFileTool = {
41
+ name: 'write_file',
42
+ description: 'Write content to a file. Creates parent directories if needed. Overwrites existing files.',
43
+ parameters: {
44
+ type: 'object',
45
+ properties: {
46
+ path: { type: 'string', description: 'File path relative to project root' },
47
+ content: { type: 'string', description: 'Content to write' },
48
+ },
49
+ required: ['path', 'content'],
50
+ },
51
+ async execute(args, ctx) {
52
+ const filePath = args.path;
53
+ const content = args.content;
54
+ try {
55
+ const resolved = (0, sandbox_1.resolveSandboxed)(ctx.projectDir, filePath);
56
+ // Check content size
57
+ const bytes = Buffer.byteLength(content, 'utf-8');
58
+ if (bytes > ctx.maxFileSize) {
59
+ throw new Error(`Content size ${bytes} bytes exceeds maximum of ${ctx.maxFileSize} bytes`);
60
+ }
61
+ // Create parent directories
62
+ await fs.promises.mkdir(path.dirname(resolved), { recursive: true });
63
+ // Write file
64
+ await fs.promises.writeFile(resolved, content, 'utf-8');
65
+ return {
66
+ tool_call_id: '',
67
+ name: 'write_file',
68
+ success: true,
69
+ output: `Wrote ${bytes} bytes to ${filePath}`,
70
+ verified: false, // Verification will re-read to confirm
71
+ verification_details: 'Pending verification',
72
+ };
73
+ }
74
+ catch (err) {
75
+ const msg = err instanceof Error ? err.message : String(err);
76
+ return {
77
+ tool_call_id: '',
78
+ name: 'write_file',
79
+ success: false,
80
+ output: '',
81
+ error: msg,
82
+ verified: true,
83
+ verification_details: `Write failed: ${msg}`,
84
+ };
85
+ }
86
+ },
87
+ };
88
+ //# sourceMappingURL=write-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/tools/write-file.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAE7B,uCAA6C;AAEhC,QAAA,aAAa,GAAmB;IAC3C,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,2FAA2F;IACxG,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oCAAoC,EAAE;YAC3E,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;SAC7D;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;KAC9B;IACD,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,GAAgB;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAc,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QAEvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAA,0BAAgB,EAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAE5D,qBAAqB;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,gBAAgB,KAAK,6BAA6B,GAAG,CAAC,WAAW,QAAQ,CAAC,CAAC;YAC7F,CAAC;YAED,4BAA4B;YAC5B,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAErE,aAAa;YACb,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAExD,OAAO;gBACL,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,SAAS,KAAK,aAAa,QAAQ,EAAE;gBAC7C,QAAQ,EAAE,KAAK,EAAE,uCAAuC;gBACxD,oBAAoB,EAAE,sBAAsB;aAC7C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO;gBACL,YAAY,EAAE,EAAE;gBAChB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,GAAG;gBACV,QAAQ,EAAE,IAAI;gBACd,oBAAoB,EAAE,iBAAiB,GAAG,EAAE;aAC7C,CAAC;QACJ,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Core types for the Funolio agent tool execution engine.
3
+ */
4
+ export interface ToolCall {
5
+ id: string;
6
+ name: string;
7
+ arguments: Record<string, unknown>;
8
+ }
9
+ export interface ToolResult {
10
+ tool_call_id: string;
11
+ name: string;
12
+ success: boolean;
13
+ output: string;
14
+ error?: string;
15
+ /** Verification metadata */
16
+ verified: boolean;
17
+ verification_details?: string;
18
+ /** For file operations */
19
+ diff?: string;
20
+ /** For command execution */
21
+ exit_code?: number;
22
+ stderr?: string;
23
+ }
24
+ export interface ToolDefinition {
25
+ name: string;
26
+ description: string;
27
+ parameters: Record<string, unknown>;
28
+ execute: (args: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
29
+ }
30
+ export interface ToolContext {
31
+ /** Absolute path to the project directory (sandbox root) */
32
+ projectDir: string;
33
+ /** Default command timeout in seconds */
34
+ commandTimeout: number;
35
+ /** Max command timeout in seconds */
36
+ maxCommandTimeout: number;
37
+ /** Max file size in bytes */
38
+ maxFileSize: number;
39
+ }
40
+ export interface AgentConversationTurn {
41
+ role: 'user' | 'assistant' | 'tool';
42
+ content: string;
43
+ tool_calls?: ToolCall[];
44
+ tool_results?: ToolResult[];
45
+ }
46
+ export interface ClerkPayload {
47
+ conversation: AgentConversationTurn[];
48
+ file_diffs: FileDiff[];
49
+ commands_executed: CommandLog[];
50
+ git_changes: string[];
51
+ task_id?: string;
52
+ project_id?: string;
53
+ }
54
+ export interface FileDiff {
55
+ path: string;
56
+ before?: string;
57
+ after?: string;
58
+ diff: string;
59
+ }
60
+ export interface CommandLog {
61
+ command: string;
62
+ exit_code: number;
63
+ stdout: string;
64
+ stderr: string;
65
+ duration_ms: number;
66
+ }
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4BAA4B;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,WAAW;IAC1B,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Core types for the Funolio agent tool execution engine.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Phase 3E: Execution Verification (Ground Truth)
3
+ *
4
+ * After each tool execution, verify the result matches intent.
5
+ * - File edits: re-read file to confirm changes applied
6
+ * - Commands: check exit code, parse stderr for error patterns
7
+ * - Git commits: verify commit was created
8
+ * If verification fails, return error with details so LLM can retry.
9
+ */
10
+ import { ToolResult, ToolContext } from '../types';
11
+ /**
12
+ * Verify a tool result after execution.
13
+ * Returns the result with verified=true and updated verification_details.
14
+ * If verification fails, success is set to false with error details.
15
+ */
16
+ export declare function verifyToolResult(result: ToolResult, originalArgs: Record<string, unknown>, ctx: ToolContext): Promise<ToolResult>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAcnD;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA6BrB"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ /**
3
+ * Phase 3E: Execution Verification (Ground Truth)
4
+ *
5
+ * After each tool execution, verify the result matches intent.
6
+ * - File edits: re-read file to confirm changes applied
7
+ * - Commands: check exit code, parse stderr for error patterns
8
+ * - Git commits: verify commit was created
9
+ * If verification fails, return error with details so LLM can retry.
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.verifyToolResult = verifyToolResult;
46
+ const fs = __importStar(require("fs"));
47
+ const child_process_1 = require("child_process");
48
+ const sandbox_1 = require("../tools/sandbox");
49
+ /** Known stderr error patterns that indicate failure even with exit code 0 */
50
+ const ERROR_PATTERNS = [
51
+ /segmentation fault/i,
52
+ /stack overflow/i,
53
+ /out of memory/i,
54
+ /permission denied/i,
55
+ /no such file or directory/i,
56
+ /fatal:/i,
57
+ /panic:/i,
58
+ ];
59
+ /**
60
+ * Verify a tool result after execution.
61
+ * Returns the result with verified=true and updated verification_details.
62
+ * If verification fails, success is set to false with error details.
63
+ */
64
+ async function verifyToolResult(result, originalArgs, ctx) {
65
+ // Already verified (e.g., read operations, errors)
66
+ if (result.verified) {
67
+ // Still check stderr patterns for command results
68
+ if (result.stderr) {
69
+ const stderrIssue = checkStderrPatterns(result.stderr);
70
+ if (stderrIssue && result.success) {
71
+ return {
72
+ ...result,
73
+ success: false,
74
+ error: `Verification warning: ${stderrIssue}`,
75
+ verification_details: `stderr contains error pattern: ${stderrIssue}`,
76
+ };
77
+ }
78
+ }
79
+ return result;
80
+ }
81
+ // Verify based on tool type
82
+ switch (result.name) {
83
+ case 'write_file':
84
+ return verifyWriteFile(result, originalArgs, ctx);
85
+ case 'edit_file':
86
+ return verifyEditFile(result, originalArgs, ctx);
87
+ case 'git_commit':
88
+ return verifyGitCommit(result, originalArgs, ctx);
89
+ default:
90
+ return { ...result, verified: true };
91
+ }
92
+ }
93
+ async function verifyWriteFile(result, args, ctx) {
94
+ if (!result.success)
95
+ return { ...result, verified: true };
96
+ const filePath = args.path;
97
+ const expectedContent = args.content;
98
+ try {
99
+ const resolved = (0, sandbox_1.resolveSandboxed)(ctx.projectDir, filePath);
100
+ const actual = await fs.promises.readFile(resolved, 'utf-8');
101
+ if (actual === expectedContent) {
102
+ return {
103
+ ...result,
104
+ verified: true,
105
+ verification_details: `Verified: file content matches (${Buffer.byteLength(actual, 'utf-8')} bytes)`,
106
+ };
107
+ }
108
+ else {
109
+ return {
110
+ ...result,
111
+ success: false,
112
+ verified: true,
113
+ error: `Verification failed: file content does not match what was written. Expected ${Buffer.byteLength(expectedContent, 'utf-8')} bytes, got ${Buffer.byteLength(actual, 'utf-8')} bytes.`,
114
+ verification_details: 'File content mismatch after write',
115
+ };
116
+ }
117
+ }
118
+ catch (err) {
119
+ const msg = err instanceof Error ? err.message : String(err);
120
+ return {
121
+ ...result,
122
+ success: false,
123
+ verified: true,
124
+ error: `Verification failed: could not re-read file: ${msg}`,
125
+ verification_details: `Re-read failed: ${msg}`,
126
+ };
127
+ }
128
+ }
129
+ async function verifyEditFile(result, args, ctx) {
130
+ if (!result.success)
131
+ return { ...result, verified: true };
132
+ const filePath = args.path;
133
+ const oldString = args.old_string;
134
+ const newString = args.new_string;
135
+ try {
136
+ const resolved = (0, sandbox_1.resolveSandboxed)(ctx.projectDir, filePath);
137
+ const actual = await fs.promises.readFile(resolved, 'utf-8');
138
+ // Verify old_string is gone and new_string is present
139
+ if (actual.includes(oldString)) {
140
+ return {
141
+ ...result,
142
+ success: false,
143
+ verified: true,
144
+ error: 'Verification failed: old_string still present in file after edit.',
145
+ verification_details: 'Edit did not apply: old_string still present',
146
+ };
147
+ }
148
+ if (!actual.includes(newString)) {
149
+ return {
150
+ ...result,
151
+ success: false,
152
+ verified: true,
153
+ error: 'Verification failed: new_string not found in file after edit.',
154
+ verification_details: 'Edit did not apply: new_string not found',
155
+ };
156
+ }
157
+ return {
158
+ ...result,
159
+ verified: true,
160
+ verification_details: 'Verified: edit applied correctly (old_string removed, new_string present)',
161
+ };
162
+ }
163
+ catch (err) {
164
+ const msg = err instanceof Error ? err.message : String(err);
165
+ return {
166
+ ...result,
167
+ success: false,
168
+ verified: true,
169
+ error: `Verification failed: could not re-read file: ${msg}`,
170
+ verification_details: `Re-read failed: ${msg}`,
171
+ };
172
+ }
173
+ }
174
+ async function verifyGitCommit(result, args, ctx) {
175
+ if (!result.success)
176
+ return { ...result, verified: true };
177
+ const message = args.message;
178
+ try {
179
+ const { stdout } = await new Promise((resolve, reject) => {
180
+ (0, child_process_1.execFile)('git', ['log', '-1', '--format=%s'], { cwd: ctx.projectDir, timeout: 10000 }, (error, stdout, stderr) => {
181
+ if (error)
182
+ reject(error);
183
+ else
184
+ resolve({ stdout: stdout || '', stderr: stderr || '' });
185
+ });
186
+ });
187
+ const lastCommitMsg = stdout.trim();
188
+ if (lastCommitMsg === message) {
189
+ return {
190
+ ...result,
191
+ verified: true,
192
+ verification_details: `Verified: commit created with message "${message}"`,
193
+ };
194
+ }
195
+ else {
196
+ return {
197
+ ...result,
198
+ success: false,
199
+ verified: true,
200
+ error: `Verification failed: last commit message is "${lastCommitMsg}", expected "${message}"`,
201
+ verification_details: 'Commit message mismatch',
202
+ };
203
+ }
204
+ }
205
+ catch (err) {
206
+ const msg = err instanceof Error ? err.message : String(err);
207
+ return {
208
+ ...result,
209
+ success: false,
210
+ verified: true,
211
+ error: `Verification failed: could not check git log: ${msg}`,
212
+ verification_details: `Git log check failed: ${msg}`,
213
+ };
214
+ }
215
+ }
216
+ function checkStderrPatterns(stderr) {
217
+ for (const pattern of ERROR_PATTERNS) {
218
+ const match = stderr.match(pattern);
219
+ if (match)
220
+ return match[0];
221
+ }
222
+ return null;
223
+ }
224
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/verification/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "funolio-agent",
3
+ "version": "0.1.0",
4
+ "description": "Funolio AI agent CLI - run AI tasks locally with your own API keys",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "funolio-agent": "dist/cli.js"
9
+ },
10
+ "files": ["dist", "README.md", "LICENSE"],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "start": "node dist/index.js",
15
+ "prepublishOnly": "npm run build"
16
+ },
17
+ "dependencies": {
18
+ "commander": "^12.1.0",
19
+ "mqtt": "^5.10.0",
20
+ "chalk": "^4.1.2"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0",
24
+ "@types/node": "^20.14.0"
25
+ },
26
+ "engines": {
27
+ "node": ">=18.0.0"
28
+ },
29
+ "keywords": ["funolio", "ai", "agent", "cli", "bot"],
30
+ "author": "Funolio <sp@funolio.com>",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/mpalmi3/Funolio.git",
35
+ "directory": "packages/funolio-agent"
36
+ },
37
+ "homepage": "https://funolio.com",
38
+ "bugs": {
39
+ "url": "https://github.com/mpalmi3/Funolio/issues"
40
+ }
41
+ }