ft-scout 9.0.0 → 9.0.2

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 (57) hide show
  1. package/.firebase/hosting.d2Vi.cache +7 -7
  2. package/README.md +93 -13
  3. package/bin/src/commands/agent.d.ts.map +1 -1
  4. package/bin/src/commands/agent.js +46 -3
  5. package/bin/src/commands/agent.js.map +1 -1
  6. package/bin/src/commands/plan.d.ts.map +1 -1
  7. package/bin/src/commands/plan.js +19 -5
  8. package/bin/src/commands/plan.js.map +1 -1
  9. package/bin/src/engine/actionVerifier.d.ts.map +1 -0
  10. package/bin/src/engine/actionVerifier.js +223 -0
  11. package/bin/src/engine/actionVerifier.js.map +1 -0
  12. package/bin/src/engine/agentEngine.d.ts.map +1 -1
  13. package/bin/src/engine/agentEngine.js +233 -1
  14. package/bin/src/engine/agentEngine.js.map +1 -1
  15. package/bin/src/engine/agentState.d.ts.map +1 -0
  16. package/bin/src/engine/agentState.js +445 -0
  17. package/bin/src/engine/agentState.js.map +1 -0
  18. package/bin/src/engine/appControl.d.ts.map +1 -1
  19. package/bin/src/engine/appControl.js +19 -6
  20. package/bin/src/engine/appControl.js.map +1 -1
  21. package/bin/src/engine/browser/browserController.d.ts.map +1 -0
  22. package/bin/src/engine/browser/browserController.js +689 -0
  23. package/bin/src/engine/browser/browserController.js.map +1 -0
  24. package/bin/src/engine/browser/index.d.ts.map +1 -0
  25. package/bin/src/engine/browser/index.js +2 -0
  26. package/bin/src/engine/browser/index.js.map +1 -0
  27. package/bin/src/engine/computer/computerController.d.ts.map +1 -0
  28. package/bin/src/engine/computer/computerController.js +295 -0
  29. package/bin/src/engine/computer/computerController.js.map +1 -0
  30. package/bin/src/engine/computer/index.d.ts.map +1 -0
  31. package/bin/src/engine/computer/index.js +2 -0
  32. package/bin/src/engine/computer/index.js.map +1 -0
  33. package/bin/src/engine/planner.d.ts.map +1 -0
  34. package/bin/src/engine/planner.js +242 -0
  35. package/bin/src/engine/planner.js.map +1 -0
  36. package/bin/src/engine/safety.d.ts.map +1 -0
  37. package/bin/src/engine/safety.js +281 -0
  38. package/bin/src/engine/safety.js.map +1 -0
  39. package/bin/src/engine/toolRegistry.d.ts.map +1 -0
  40. package/bin/src/engine/toolRegistry.js +218 -0
  41. package/bin/src/engine/toolRegistry.js.map +1 -0
  42. package/bin/src/index.js +6 -4
  43. package/bin/src/index.js.map +1 -1
  44. package/bin/src/server/server.d.ts.map +1 -1
  45. package/bin/src/server/server.js +116 -0
  46. package/bin/src/server/server.js.map +1 -1
  47. package/bin/src/utils/branding.js +1 -1
  48. package/bin/src/utils/payment.d.ts.map +1 -1
  49. package/bin/src/utils/payment.js +23 -3
  50. package/bin/src/utils/payment.js.map +1 -1
  51. package/bin/src/utils/pricing.d.ts.map +1 -1
  52. package/bin/src/utils/pricing.js +32 -10
  53. package/bin/src/utils/pricing.js.map +1 -1
  54. package/downloads/INVOICE_2026_ACME.pdf +1 -0
  55. package/package.json +1 -1
  56. package/web/app.js +294 -42
  57. package/web/styles.css +79 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["planner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,MAAM,iBAAiB,CAAC;AAUpD,MAAM,OAAO,WAAW;IACb,UAAU,CAAC,SAAiB,EAAE,YAAuB;QACxD,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,8EAA8E;QAC9E,MAAM,sBAAsB,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1H,MAAM,oBAAoB,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QACnK,MAAM,kBAAkB,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QACxL,MAAM,qBAAqB,GAAG,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEvJ,IAAI,sBAAsB,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,0CAA0C;gBACvD,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,6CAA6C;gBAC1D,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,iDAAiD;gBAC9D,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,6DAA6D;gBAC1E,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,qEAAqE;gBAClF,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,0DAA0D;gBACvE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;YACvD,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,wDAAwD;gBACrE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,0DAA0D;gBACvE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,4DAA4D;gBACzE,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,2DAA2D;gBACxE,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,0CAA0C;gBACvD,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,oBAAoB,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,uCAAuC;gBACpD,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,IAAI;aACvB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,iDAAiD;gBAC9D,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,IAAI;aACvB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,yCAAyC;gBACtD,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC;aAAM,IAAI,kBAAkB,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,yDAAyD;gBACtE,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,yDAAyD;gBACtE,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,iEAAiE;gBAC9E,QAAQ,EAAE,MAAM;gBAChB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,0BAA0B;YAC1B,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,6DAA6D;gBAC1E,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,SAAS;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,4DAA4D;gBACzE,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC;gBACP,EAAE,EAAE,CAAC;gBACL,WAAW,EAAE,qEAAqE;gBAClF,QAAQ,EAAE,SAAS;gBACnB,MAAM,EAAE,SAAS;gBACjB,YAAY,EAAE,CAAC,CAAC,CAAC;gBACjB,cAAc,EAAE,KAAK;aACxB,CAAC,CAAC;QACP,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE;YACzC,SAAS;YACT,KAAK;YACL,mBAAmB,EAAE,KAAK,CAAC,MAAM;YACjC,kBAAkB,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5D,cAAc;SACjB,CAAmB,CAAC;QAErB,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,qBAAqB,CAAC,KAAqB;QAC9C,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;QAE7B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAChE,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,wDAAwD;gBACxD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAG,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,SAAS;YACb,CAAC;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3C,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACvB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACpB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;oBACtD,IAAI,GAAG,KAAK,CAAC,CAAC;wBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzB,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC3D,IAAI,GAAG,KAAK,CAAC,CAAC;oBAAE,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEM,2BAA2B,CAAC,WAA4C;QAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,WAAmB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC7F,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEM,oBAAoB,CAAC,YAA4B,EAAE,aAAqB,EAAE,sBAA8B;QAC3G,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;gBACzB,OAAO;oBACH,GAAG,CAAC;oBACJ,MAAM,EAAE,SAAS;oBACjB,WAAW,EAAE,GAAG,CAAC,CAAC,WAAW,2BAA2B,sBAAsB,GAAG;iBACpF,CAAC;YACN,CAAC;YACD,OAAO,CAAC,CAAC;QACb,CAAC,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ import chalk from 'chalk';
2
+ import { confirm, isCancel } from '@clack/prompts';
3
+ export class RiskClassifier {
4
+ sensitiveKeywords = [
5
+ 'password', 'secret', 'token', 'apikey', 'credential',
6
+ 'credit_card', 'card_number', 'cvv', 'pay', 'purchase',
7
+ 'checkout', 'transfer', 'wire', 'invoice_pay', 'buy'
8
+ ];
9
+ destructiveCommands = [
10
+ /\brm\s+-rf\b/i,
11
+ /\bformat\b/i,
12
+ /\bdrop\s+table\b/i,
13
+ /\bdrop\s+database\b/i,
14
+ /\btruncate\b/i,
15
+ /\bdel\s+\/f\s+\/s\s+\/q\b/i,
16
+ /\bRemove-Item\s+.*-Recurse\s+-Force\b/i,
17
+ /\bgit\s+reset\s+--hard\b/i,
18
+ /\bgit\s+clean\s+-fdx\b/i,
19
+ ];
20
+ assessAction(tool, args = {}) {
21
+ const toolLower = (tool || '').toLowerCase().trim();
22
+ // 1. Critical / High Risk: External messaging, emails, financial transactions
23
+ if (toolLower === 'app_action') {
24
+ const act = String(args.action || '').toLowerCase();
25
+ if (['send_mail', 'send_dm', 'submit_form'].includes(act)) {
26
+ return {
27
+ level: 'high',
28
+ requiresApproval: true,
29
+ reason: `Action "${act}" sends external communication or submits form data to a third-party service.`,
30
+ };
31
+ }
32
+ if (act === 'takeover' || act === 'takeover_screen') {
33
+ return {
34
+ level: 'medium',
35
+ requiresApproval: false,
36
+ reason: `Taking over display/mouse cursor for local application interaction.`,
37
+ };
38
+ }
39
+ }
40
+ // 2. High Risk: Shell commands with destructive potential or external push
41
+ if (toolLower === 'run_command') {
42
+ const cmd = String(args.command || args.cmd || '');
43
+ for (const pattern of this.destructiveCommands) {
44
+ if (pattern.test(cmd)) {
45
+ return {
46
+ level: 'critical',
47
+ requiresApproval: true,
48
+ reason: `Command "${cmd}" contains potentially irreversible file deletion or destructive flags.`,
49
+ };
50
+ }
51
+ }
52
+ if (/\b(?:curl|wget|invoke-webrequest)\b.*\b(?:sh|bash|powershell|iex)\b/i.test(cmd)) {
53
+ return {
54
+ level: 'high',
55
+ requiresApproval: true,
56
+ reason: `Command downloads and directly executes remote shell scripts.`,
57
+ };
58
+ }
59
+ if (/\bgit\s+push\b/i.test(cmd) || /\bnpm\s+publish\b/i.test(cmd) || /\bdeploy\b/i.test(cmd)) {
60
+ return {
61
+ level: 'high',
62
+ requiresApproval: true,
63
+ reason: `Command executes repository push or deployment: "${cmd}".`,
64
+ };
65
+ }
66
+ return {
67
+ level: 'medium',
68
+ requiresApproval: false,
69
+ reason: `Running local shell command: "${cmd.slice(0, 60)}"`,
70
+ };
71
+ }
72
+ // 3. High Risk: Overwriting sensitive configuration or credentials
73
+ if (toolLower === 'write_file' || toolLower === 'edit_file') {
74
+ const filePath = String(args.path || '').toLowerCase();
75
+ if (filePath.includes('.env') || filePath.includes('id_rsa') || filePath.includes('credentials') || filePath.includes('auth.json')) {
76
+ return {
77
+ level: 'high',
78
+ requiresApproval: true,
79
+ reason: `Modifying sensitive credential or environment configuration file: "${filePath}".`,
80
+ };
81
+ }
82
+ return {
83
+ level: 'medium',
84
+ requiresApproval: false,
85
+ reason: `Modifying workspace source file: "${args.path}"`,
86
+ };
87
+ }
88
+ // 4. Computer-use clicks or inputs on sensitive targets
89
+ if (toolLower === 'computer_click' || toolLower === 'browser_click') {
90
+ const targetDesc = String(args.element || args.selectorOrText || args.target || args.ref || '').toLowerCase();
91
+ for (const kw of ['delete account', 'confirm purchase', 'pay now', 'buy now', 'send', 'transfer', 'revoke', 'checkout', 'payment']) {
92
+ if (targetDesc.includes(kw)) {
93
+ return {
94
+ level: 'high',
95
+ requiresApproval: true,
96
+ reason: `Clicking sensitive target with label "${targetDesc}".`,
97
+ };
98
+ }
99
+ }
100
+ return {
101
+ level: 'medium',
102
+ requiresApproval: false,
103
+ reason: `Clicking on UI element: "${targetDesc || `${args.x}, ${args.y}`}"`,
104
+ };
105
+ }
106
+ // 5. Form inputs & Typing
107
+ if (toolLower === 'browser_fill_input' || toolLower === 'browser_type' || toolLower === 'computer_type') {
108
+ return {
109
+ level: 'medium',
110
+ requiresApproval: false,
111
+ reason: `Filling form or typing text input.`,
112
+ };
113
+ }
114
+ // 6. Read-only exploration tools are always low-risk
115
+ if ([
116
+ 'read_file', 'list_dir', 'grep_search', 'glob_search', 'tree_view',
117
+ 'file_info', 'fetch_url', 'git_diff', 'browser_inspect', 'browser_content',
118
+ 'browser_get_dom', 'computer_get_window_list',
119
+ 'computer_screenshot', 'see_screen', 'analyze_screen'
120
+ ].includes(toolLower)) {
121
+ return {
122
+ level: 'low',
123
+ requiresApproval: false,
124
+ reason: `Read-only inspection action.`,
125
+ };
126
+ }
127
+ return {
128
+ level: 'low',
129
+ requiresApproval: false,
130
+ reason: `Standard autonomous operation.`,
131
+ };
132
+ }
133
+ classify(tool, args = {}) {
134
+ return this.assessAction(tool, args).level.toUpperCase();
135
+ }
136
+ }
137
+ export class ApprovalManager {
138
+ static _instance = null;
139
+ static getInstance() {
140
+ if (!ApprovalManager._instance) {
141
+ ApprovalManager._instance = new ApprovalManager();
142
+ }
143
+ return ApprovalManager._instance;
144
+ }
145
+ classifier;
146
+ autoApprove;
147
+ pendingRequests = new Map();
148
+ approvalResolvers = new Map();
149
+ constructor(autoApprove = false) {
150
+ this.classifier = new RiskClassifier();
151
+ this.autoApprove = autoApprove;
152
+ }
153
+ setAutoApprove(enabled) {
154
+ this.autoApprove = enabled;
155
+ }
156
+ isAutoApprove() {
157
+ return this.autoApprove;
158
+ }
159
+ checkAction(tool, args = {}) {
160
+ return this.classifier.assessAction(tool, args);
161
+ }
162
+ async requestApproval(requestOrTaskId, tool, args = {}, assessment) {
163
+ // Mode 1: Options object argument
164
+ if (typeof requestOrTaskId === 'object' && requestOrTaskId !== null) {
165
+ const reqObj = requestOrTaskId;
166
+ const action = reqObj.action || reqObj.tool || 'unknown';
167
+ const riskLevel = (reqObj.riskLevel || 'MEDIUM').toUpperCase();
168
+ const isHighOrCritical = riskLevel === 'HIGH' || riskLevel === 'CRITICAL';
169
+ if (!isHighOrCritical || this.autoApprove) {
170
+ return true;
171
+ }
172
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`;
173
+ const request = {
174
+ id: requestId,
175
+ taskId: reqObj.taskId || 'task_default',
176
+ tool: action,
177
+ action,
178
+ target: reqObj.target,
179
+ args: reqObj.args || {},
180
+ risk: {
181
+ level: riskLevel.toLowerCase(),
182
+ requiresApproval: isHighOrCritical,
183
+ reason: reqObj.description || 'Action requires approval',
184
+ },
185
+ riskLevel,
186
+ description: reqObj.description,
187
+ timestamp: new Date().toISOString(),
188
+ status: 'pending',
189
+ };
190
+ this.pendingRequests.set(requestId, request);
191
+ return new Promise((resolve) => {
192
+ this.approvalResolvers.set(requestId, (approved) => {
193
+ this.pendingRequests.delete(requestId);
194
+ this.approvalResolvers.delete(requestId);
195
+ request.status = approved ? 'approved' : 'rejected';
196
+ request.resolvedAt = new Date().toISOString();
197
+ resolve(approved);
198
+ });
199
+ });
200
+ }
201
+ // Mode 2: (taskId, tool, args, assessment)
202
+ const taskId = String(requestOrTaskId);
203
+ const targetTool = tool || 'unknown';
204
+ const risk = assessment || this.classifier.assessAction(targetTool, args);
205
+ if (!risk.requiresApproval || this.autoApprove) {
206
+ return { approved: true, reason: 'Auto-approved by policy.' };
207
+ }
208
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substring(2, 6)}`;
209
+ const request = {
210
+ id: requestId,
211
+ taskId,
212
+ tool: targetTool,
213
+ action: targetTool,
214
+ args,
215
+ risk,
216
+ riskLevel: risk.level.toUpperCase(),
217
+ timestamp: new Date().toISOString(),
218
+ status: 'pending',
219
+ };
220
+ this.pendingRequests.set(requestId, request);
221
+ // In interactive TTY environments, present Clack confirmation prompt
222
+ if (process.stdout.isTTY && !process.env.CI) {
223
+ const riskColor = risk.level === 'critical' ? chalk.bgRed.white.bold : chalk.bgYellow.black.bold;
224
+ console.log(`\n${riskColor(` ⚠️ ACTION APPROVAL REQUIRED: ${risk.level.toUpperCase()} RISK `)}`);
225
+ console.log(chalk.yellow(`Scout wants to execute: ${chalk.bold.cyan(targetTool)}`));
226
+ console.log(chalk.dim(`Reason: ${risk.reason}`));
227
+ console.log(chalk.dim(`Arguments: ${JSON.stringify(args, null, 2)}`));
228
+ try {
229
+ const confirmed = await confirm({
230
+ message: `Authorize Scout to execute this action?`,
231
+ initialValue: false,
232
+ });
233
+ const isOk = !isCancel(confirmed) && Boolean(confirmed);
234
+ request.status = isOk ? 'approved' : 'rejected';
235
+ request.resolvedAt = new Date().toISOString();
236
+ this.pendingRequests.delete(requestId);
237
+ return {
238
+ approved: isOk,
239
+ reason: isOk ? 'Approved by user via CLI confirmation' : 'Rejected by user via CLI prompt',
240
+ };
241
+ }
242
+ catch {
243
+ return { approved: false, reason: 'Confirmation prompt interrupted' };
244
+ }
245
+ }
246
+ // In non-interactive or web server mode, wait for external resolution
247
+ return new Promise((resolve) => {
248
+ const timer = setTimeout(() => {
249
+ this.pendingRequests.delete(requestId);
250
+ this.approvalResolvers.delete(requestId);
251
+ resolve({ approved: false, reason: 'Approval request timed out after 30 seconds.' });
252
+ }, 30000);
253
+ this.approvalResolvers.set(requestId, (approved) => {
254
+ clearTimeout(timer);
255
+ this.pendingRequests.delete(requestId);
256
+ this.approvalResolvers.delete(requestId);
257
+ request.status = approved ? 'approved' : 'rejected';
258
+ request.resolvedAt = new Date().toISOString();
259
+ resolve({
260
+ approved,
261
+ reason: approved ? 'Approved by user via Dashboard' : 'Rejected by user via Dashboard',
262
+ });
263
+ });
264
+ });
265
+ }
266
+ submitDecision(requestId, approved) {
267
+ const resolver = this.approvalResolvers.get(requestId);
268
+ if (resolver) {
269
+ resolver(approved);
270
+ return true;
271
+ }
272
+ return false;
273
+ }
274
+ resolveRequest(requestId, approved, reason) {
275
+ return this.submitDecision(requestId, approved);
276
+ }
277
+ getPendingRequests() {
278
+ return Array.from(this.pendingRequests.values());
279
+ }
280
+ }
281
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.d.ts","sourceRoot":"","sources":["toolRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEpE,MAAM,WAAW,2BAA2B;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAiF9C,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,cAAc,EAmEpD,CAAC;AAEF,qBAAa,mBAAmB;IAC5B,OAAO,CAAC,QAAQ,CAA0C;IAE1D,cAaC;IAEM,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEvD;IAEM,WAAW,IAAI,cAAc,EAAE,CAErC;IAEM,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,EAAE,CAK1G;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,MAAM,CAmC7H;CACJ"}
@@ -0,0 +1,218 @@
1
+ import { AGENT_TOOLS } from './agentEngine.js';
2
+ export const COMPUTER_USE_TOOLS = [
3
+ {
4
+ name: 'computer_screenshot',
5
+ description: 'Capture a screenshot of the current computer screen display.',
6
+ parameters: {
7
+ type: 'object',
8
+ properties: {},
9
+ required: [],
10
+ },
11
+ },
12
+ {
13
+ name: 'computer_click',
14
+ description: 'Click mouse button at specific (x, y) coordinates or target on screen.',
15
+ parameters: {
16
+ type: 'object',
17
+ properties: {
18
+ x: { type: 'number', description: 'Horizontal pixel coordinate' },
19
+ y: { type: 'number', description: 'Vertical pixel coordinate' },
20
+ button: { type: 'string', description: 'Mouse button ("left", "right", "middle")', enum: ['left', 'right', 'middle'] },
21
+ double: { type: 'boolean', description: 'Whether to perform double-click' },
22
+ },
23
+ required: ['x', 'y'],
24
+ },
25
+ },
26
+ {
27
+ name: 'computer_type',
28
+ description: 'Type text keystrokes into currently focused window or application.',
29
+ parameters: {
30
+ type: 'object',
31
+ properties: {
32
+ text: { type: 'string', description: 'Text string to type' },
33
+ },
34
+ required: ['text'],
35
+ },
36
+ },
37
+ {
38
+ name: 'computer_hotkey',
39
+ description: 'Press keyboard shortcut combination (e.g. "ctrl+c", "alt+tab", "ctrl+enter").',
40
+ parameters: {
41
+ type: 'object',
42
+ properties: {
43
+ keys: { type: 'string', description: 'Key combo string (e.g. "ctrl+v", "enter")' },
44
+ },
45
+ required: ['keys'],
46
+ },
47
+ },
48
+ {
49
+ name: 'computer_open_app',
50
+ description: 'Launch or bring to front any desktop application by name.',
51
+ parameters: {
52
+ type: 'object',
53
+ properties: {
54
+ name: { type: 'string', description: 'Application name or command (e.g. "chrome", "notepad", "code")' },
55
+ target: { type: 'string', description: 'Optional initial file or URL' },
56
+ },
57
+ required: ['name'],
58
+ },
59
+ },
60
+ {
61
+ name: 'computer_switch_app',
62
+ description: 'Switch active foreground window to specified application.',
63
+ parameters: {
64
+ type: 'object',
65
+ properties: {
66
+ name: { type: 'string', description: 'Application or window name to focus' },
67
+ },
68
+ required: ['name'],
69
+ },
70
+ },
71
+ {
72
+ name: 'computer_scroll',
73
+ description: 'Scroll mouse wheel in specified direction.',
74
+ parameters: {
75
+ type: 'object',
76
+ properties: {
77
+ direction: { type: 'string', description: 'Direction ("up", "down", "left", "right")', enum: ['up', 'down', 'left', 'right'] },
78
+ amount: { type: 'number', description: 'Scroll amount (default 4)' },
79
+ },
80
+ required: ['direction'],
81
+ },
82
+ },
83
+ ];
84
+ export const BROWSER_AUTOMATION_TOOLS = [
85
+ {
86
+ name: 'browser_navigate',
87
+ description: 'Open a URL in the browser and parse its DOM contents and interactive elements.',
88
+ parameters: {
89
+ type: 'object',
90
+ properties: {
91
+ url: { type: 'string', description: 'Target HTTP or HTTPS URL' },
92
+ },
93
+ required: ['url'],
94
+ },
95
+ },
96
+ {
97
+ name: 'browser_inspect',
98
+ description: 'Inspect current web page DOM to discover clickable links, buttons, inputs, and form controls.',
99
+ parameters: {
100
+ type: 'object',
101
+ properties: {},
102
+ required: [],
103
+ },
104
+ },
105
+ {
106
+ name: 'browser_click',
107
+ description: 'Click a button, link, or element on the active web page by selector, text, or ref ID.',
108
+ parameters: {
109
+ type: 'object',
110
+ properties: {
111
+ selectorOrText: { type: 'string', description: 'Element text, CSS selector, or ref (e.g. "[ref=1]", "#download", "Download Invoice")' },
112
+ },
113
+ required: ['selectorOrText'],
114
+ },
115
+ },
116
+ {
117
+ name: 'browser_type',
118
+ description: 'Type text into an input field or textarea on the active web page.',
119
+ parameters: {
120
+ type: 'object',
121
+ properties: {
122
+ selectorOrText: { type: 'string', description: 'Target input name, placeholder, or selector' },
123
+ text: { type: 'string', description: 'Text string to fill in' },
124
+ },
125
+ required: ['selectorOrText', 'text'],
126
+ },
127
+ },
128
+ {
129
+ name: 'browser_download',
130
+ description: 'Download a file from an active page link or direct URL and save to workspace disk.',
131
+ parameters: {
132
+ type: 'object',
133
+ properties: {
134
+ urlOrSelector: { type: 'string', description: 'Download link URL or selector' },
135
+ destPath: { type: 'string', description: 'Optional destination file path' },
136
+ },
137
+ required: ['urlOrSelector'],
138
+ },
139
+ },
140
+ {
141
+ name: 'browser_content',
142
+ description: 'Extract visible text and tabular content from the active web page.',
143
+ parameters: {
144
+ type: 'object',
145
+ properties: {
146
+ selector: { type: 'string', description: 'Optional CSS selector to scope extraction' },
147
+ },
148
+ required: [],
149
+ },
150
+ },
151
+ ];
152
+ export class UnifiedToolRegistry {
153
+ toolsMap = new Map();
154
+ constructor() {
155
+ // Register all baseline tools
156
+ for (const tool of AGENT_TOOLS) {
157
+ this.toolsMap.set(tool.name, tool);
158
+ }
159
+ // Register computer-use tools
160
+ for (const tool of COMPUTER_USE_TOOLS) {
161
+ this.toolsMap.set(tool.name, tool);
162
+ }
163
+ // Register browser automation tools
164
+ for (const tool of BROWSER_AUTOMATION_TOOLS) {
165
+ this.toolsMap.set(tool.name, tool);
166
+ }
167
+ }
168
+ getTool(name) {
169
+ return this.toolsMap.get(name);
170
+ }
171
+ getAllTools() {
172
+ return Array.from(this.toolsMap.values());
173
+ }
174
+ getToolsForMode(mode) {
175
+ if (mode === 'workspace_only')
176
+ return AGENT_TOOLS;
177
+ if (mode === 'browser_only')
178
+ return [...AGENT_TOOLS.filter((t) => ['read_file', 'write_file', 'task_completed', 'ask_user'].includes(t.name)), ...BROWSER_AUTOMATION_TOOLS];
179
+ if (mode === 'computer_only')
180
+ return [...AGENT_TOOLS.filter((t) => ['read_file', 'write_file', 'task_completed', 'ask_user'].includes(t.name)), ...COMPUTER_USE_TOOLS];
181
+ return this.getAllTools();
182
+ }
183
+ /**
184
+ * Tool selection strategy:
185
+ * 1. If an exact file/API operation is possible, PREFER API/TOOL (read_file, write_file, run_command)
186
+ * 2. If web interaction is needed, PREFER DOM/BROWSER (browser_navigate, browser_click, browser_type)
187
+ * 3. If native GUI or desktop app without DOM is needed, FALL BACK TO VISUAL COMPUTER USE (computer_click, computer_type, takeover)
188
+ */
189
+ selectOptimalTool(actionGoal, context) {
190
+ const lower = actionGoal.toLowerCase();
191
+ if (lower.includes('extract visible text') || (context?.hasBrowser && context?.hasDOM)) {
192
+ return 'browser_get_dom';
193
+ }
194
+ // 1. File or code operations -> API Tool
195
+ if ((lower.includes('read') || lower.includes('inspect file') || lower.includes('view code')) && lower.includes('file')) {
196
+ return 'read_file';
197
+ }
198
+ if ((lower.includes('write') || lower.includes('create file') || lower.includes('save') || lower.includes('update file')) && !lower.includes('browser')) {
199
+ return 'write_file';
200
+ }
201
+ // 2. Web browsing, links, scraping, web forms -> DOM/Browser
202
+ if (lower.includes('navigate') || lower.includes('webpage') || lower.includes('website') || lower.includes('url') || lower.includes('http')) {
203
+ return 'browser_navigate';
204
+ }
205
+ if (lower.includes('download') && (lower.includes('invoice') || lower.includes('url') || lower.includes('link') || lower.includes('pdf'))) {
206
+ return 'browser_download';
207
+ }
208
+ if (lower.includes('click') && (lower.includes('button') || lower.includes('link') || lower.includes('menu'))) {
209
+ return 'browser_click';
210
+ }
211
+ // 3. Desktop application without DOM -> Visual Computer Use
212
+ if (lower.includes('takeover') || lower.includes('screen') || lower.includes('desktop') || lower.includes('window') || lower.includes('coordinate')) {
213
+ return 'computer_click';
214
+ }
215
+ return 'run_command';
216
+ }
217
+ }
218
+ //# sourceMappingURL=toolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["toolRegistry.ts"],"names":[],"mappings":"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"}
package/bin/src/index.js CHANGED
@@ -33,13 +33,13 @@ program
33
33
  .name('scout')
34
34
  .alias('ft')
35
35
  .description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
36
- .version('9.0.0');
36
+ .version('9.0.2');
37
37
  // Header UI on execution with FrontTerrain proprietary logo & version auto-checker
38
38
  program.hook('preAction', async (_thisCommand, actionCommand) => {
39
- intro(renderBranding('9.0.0'));
39
+ intro(renderBranding('9.0.2'));
40
40
  const cmdName = actionCommand ? actionCommand.name() : '';
41
41
  if (cmdName !== 'upgrade') {
42
- await checkForUpdates('9.0.0');
42
+ await checkForUpdates('9.0.2');
43
43
  }
44
44
  // Auth Guard: enforce authentication for all commands except login, signup, upgrade, help, dashboard, auth, status, plan
45
45
  const EXEMPT_COMMANDS = ['login', 'signin', 'signup', 'register', 'upgrade', 'help', 'dashboard', 'web-ui', 'gui', 'auth', 'status', 'quota', 'usage', 'credits', 'plan', 'pricing', 'subscribe'];
@@ -160,6 +160,7 @@ program
160
160
  .option('-l, --lang <language>', 'Language for AI teardowns, explanations, and summaries')
161
161
  .option('-V, --voice', 'Enable Text-to-Speech (TTS) & Speech-to-Text (STT) voice mode')
162
162
  .option('-S, --screen-share', 'Enable real-time live screen share stream with the model (in-memory, no disk files)')
163
+ .option('--resume <taskId>', 'Resume an existing autonomous task by ID from .ft/tasks/')
163
164
  .option('--native', 'Force native script')
164
165
  .action(async (goalParts, options) => {
165
166
  const goalStr = Array.isArray(goalParts) && goalParts.length > 0 ? goalParts.join(' ') : undefined;
@@ -170,6 +171,7 @@ program
170
171
  verifyCmd: options.verify,
171
172
  maxRetries: options.maxRetries ? Number(options.maxRetries) : undefined,
172
173
  steps: options.steps ? Number(options.steps) : undefined,
174
+ resume: options.resume,
173
175
  });
174
176
  outro(chalk.green('Agent workflow complete.'));
175
177
  });
@@ -235,7 +237,7 @@ program
235
237
  .command('upgrade')
236
238
  .description('Check for updates and auto-upgrade Scout to the latest version')
237
239
  .action(async () => {
238
- await checkForUpdates('9.0.0', true);
240
+ await checkForUpdates('9.0.2', true);
239
241
  outro(chalk.cyan('Upgrade check complete.'));
240
242
  });
241
243
  program