@intutic/cli 0.1.0 → 0.2.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 (162) hide show
  1. package/dist/cli.js +309 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/benchmark.d.ts +31 -0
  4. package/dist/commands/benchmark.d.ts.map +1 -0
  5. package/dist/commands/benchmark.js +211 -0
  6. package/dist/commands/benchmark.js.map +1 -0
  7. package/dist/commands/connect.d.ts +8 -6
  8. package/dist/commands/connect.d.ts.map +1 -1
  9. package/dist/commands/connect.js +322 -82
  10. package/dist/commands/connect.js.map +1 -1
  11. package/dist/commands/enterprise-install.d.ts +36 -0
  12. package/dist/commands/enterprise-install.d.ts.map +1 -0
  13. package/dist/commands/enterprise-install.js +289 -0
  14. package/dist/commands/enterprise-install.js.map +1 -0
  15. package/dist/commands/eval.d.ts +13 -0
  16. package/dist/commands/eval.d.ts.map +1 -0
  17. package/dist/commands/eval.js +67 -0
  18. package/dist/commands/eval.js.map +1 -0
  19. package/dist/commands/exec.d.ts +34 -0
  20. package/dist/commands/exec.d.ts.map +1 -0
  21. package/dist/commands/exec.js +114 -0
  22. package/dist/commands/exec.js.map +1 -0
  23. package/dist/commands/exec.test.d.ts +2 -0
  24. package/dist/commands/exec.test.d.ts.map +1 -0
  25. package/dist/commands/exec.test.js +29 -0
  26. package/dist/commands/exec.test.js.map +1 -0
  27. package/dist/commands/export.d.ts +21 -0
  28. package/dist/commands/export.d.ts.map +1 -0
  29. package/dist/commands/export.js +116 -0
  30. package/dist/commands/export.js.map +1 -0
  31. package/dist/commands/init.d.ts.map +1 -1
  32. package/dist/commands/init.js +28 -2
  33. package/dist/commands/init.js.map +1 -1
  34. package/dist/commands/install-daemon.d.ts +61 -0
  35. package/dist/commands/install-daemon.d.ts.map +1 -0
  36. package/dist/commands/install-daemon.js +691 -0
  37. package/dist/commands/install-daemon.js.map +1 -0
  38. package/dist/commands/install-daemon.test.d.ts +2 -0
  39. package/dist/commands/install-daemon.test.d.ts.map +1 -0
  40. package/dist/commands/install-daemon.test.js +93 -0
  41. package/dist/commands/install-daemon.test.js.map +1 -0
  42. package/dist/commands/login.js +2 -2
  43. package/dist/commands/login.js.map +1 -1
  44. package/dist/commands/logout.js +1 -1
  45. package/dist/commands/logout.js.map +1 -1
  46. package/dist/commands/mdm.d.ts +23 -0
  47. package/dist/commands/mdm.d.ts.map +1 -0
  48. package/dist/commands/mdm.js +134 -0
  49. package/dist/commands/mdm.js.map +1 -0
  50. package/dist/commands/sop-audit.d.ts +17 -0
  51. package/dist/commands/sop-audit.d.ts.map +1 -0
  52. package/dist/commands/sop-audit.js +136 -0
  53. package/dist/commands/sop-audit.js.map +1 -0
  54. package/dist/commands/status.d.ts.map +1 -1
  55. package/dist/commands/status.js +53 -1
  56. package/dist/commands/status.js.map +1 -1
  57. package/dist/commands/syncContext.d.ts +18 -0
  58. package/dist/commands/syncContext.d.ts.map +1 -0
  59. package/dist/commands/syncContext.js +37 -0
  60. package/dist/commands/syncContext.js.map +1 -0
  61. package/dist/commands/traces.d.ts +13 -0
  62. package/dist/commands/traces.d.ts.map +1 -1
  63. package/dist/commands/traces.js +104 -10
  64. package/dist/commands/traces.js.map +1 -1
  65. package/dist/commands/whoami.js +1 -1
  66. package/dist/commands/whoami.js.map +1 -1
  67. package/dist/config/keychain.d.ts +28 -0
  68. package/dist/config/keychain.d.ts.map +1 -0
  69. package/dist/config/keychain.js +99 -0
  70. package/dist/config/keychain.js.map +1 -0
  71. package/dist/config/store.d.ts +3 -3
  72. package/dist/config/store.d.ts.map +1 -1
  73. package/dist/config/store.js +30 -6
  74. package/dist/config/store.js.map +1 -1
  75. package/dist/harness/aider.d.ts +4 -3
  76. package/dist/harness/aider.d.ts.map +1 -1
  77. package/dist/harness/aider.js +13 -27
  78. package/dist/harness/aider.js.map +1 -1
  79. package/dist/harness/claudeDesktop.d.ts +18 -0
  80. package/dist/harness/claudeDesktop.d.ts.map +1 -0
  81. package/dist/harness/claudeDesktop.js +69 -0
  82. package/dist/harness/claudeDesktop.js.map +1 -0
  83. package/dist/harness/cline.d.ts +13 -0
  84. package/dist/harness/cline.d.ts.map +1 -0
  85. package/dist/harness/cline.js +75 -0
  86. package/dist/harness/cline.js.map +1 -0
  87. package/dist/harness/codex.d.ts +4 -4
  88. package/dist/harness/codex.d.ts.map +1 -1
  89. package/dist/harness/codex.js +33 -21
  90. package/dist/harness/codex.js.map +1 -1
  91. package/dist/harness/continue.d.ts +14 -0
  92. package/dist/harness/continue.d.ts.map +1 -0
  93. package/dist/harness/continue.js +97 -0
  94. package/dist/harness/continue.js.map +1 -0
  95. package/dist/harness/cursor.d.ts +13 -1
  96. package/dist/harness/cursor.d.ts.map +1 -1
  97. package/dist/harness/cursor.js +59 -3
  98. package/dist/harness/cursor.js.map +1 -1
  99. package/dist/harness/detector.d.ts +1 -1
  100. package/dist/harness/detector.d.ts.map +1 -1
  101. package/dist/harness/detector.js +13 -1
  102. package/dist/harness/detector.js.map +1 -1
  103. package/dist/harness/goose.d.ts +13 -0
  104. package/dist/harness/goose.d.ts.map +1 -0
  105. package/dist/harness/goose.js +45 -0
  106. package/dist/harness/goose.js.map +1 -0
  107. package/dist/harness/n8n.d.ts +8 -4
  108. package/dist/harness/n8n.d.ts.map +1 -1
  109. package/dist/harness/n8n.js +108 -13
  110. package/dist/harness/n8n.js.map +1 -1
  111. package/dist/harness/openWebUI.d.ts +13 -0
  112. package/dist/harness/openWebUI.d.ts.map +1 -0
  113. package/dist/harness/openWebUI.js +25 -0
  114. package/dist/harness/openWebUI.js.map +1 -0
  115. package/dist/harness/openhands.d.ts +3 -3
  116. package/dist/harness/openhands.d.ts.map +1 -1
  117. package/dist/harness/openhands.js +13 -9
  118. package/dist/harness/openhands.js.map +1 -1
  119. package/dist/harness/rooCode.d.ts +14 -0
  120. package/dist/harness/rooCode.d.ts.map +1 -0
  121. package/dist/harness/rooCode.js +77 -0
  122. package/dist/harness/rooCode.js.map +1 -0
  123. package/dist/harness/types.d.ts.map +1 -1
  124. package/dist/harness/types.js +6 -0
  125. package/dist/harness/types.js.map +1 -1
  126. package/dist/harness/vscodeSettingsWriter.d.ts +40 -0
  127. package/dist/harness/vscodeSettingsWriter.d.ts.map +1 -0
  128. package/dist/harness/vscodeSettingsWriter.js +116 -0
  129. package/dist/harness/vscodeSettingsWriter.js.map +1 -0
  130. package/dist/harness/windsurf.d.ts +13 -1
  131. package/dist/harness/windsurf.d.ts.map +1 -1
  132. package/dist/harness/windsurf.js +58 -3
  133. package/dist/harness/windsurf.js.map +1 -1
  134. package/dist/lib/api.d.ts +2 -0
  135. package/dist/lib/api.d.ts.map +1 -1
  136. package/dist/lib/api.js +3 -0
  137. package/dist/lib/api.js.map +1 -1
  138. package/dist/lib/envInjector.d.ts +24 -0
  139. package/dist/lib/envInjector.d.ts.map +1 -0
  140. package/dist/lib/envInjector.js +146 -0
  141. package/dist/lib/envInjector.js.map +1 -0
  142. package/dist/lib/envInjector.test.d.ts +2 -0
  143. package/dist/lib/envInjector.test.d.ts.map +1 -0
  144. package/dist/lib/envInjector.test.js +32 -0
  145. package/dist/lib/envInjector.test.js.map +1 -0
  146. package/dist/lib/gitHooks.d.ts +19 -0
  147. package/dist/lib/gitHooks.d.ts.map +1 -0
  148. package/dist/lib/gitHooks.js +58 -0
  149. package/dist/lib/gitHooks.js.map +1 -0
  150. package/dist/lib/onboarding.d.ts +17 -0
  151. package/dist/lib/onboarding.d.ts.map +1 -0
  152. package/dist/lib/onboarding.js +164 -0
  153. package/dist/lib/onboarding.js.map +1 -0
  154. package/dist/lib/process.d.ts +53 -0
  155. package/dist/lib/process.d.ts.map +1 -0
  156. package/dist/lib/process.js +181 -0
  157. package/dist/lib/process.js.map +1 -0
  158. package/dist/lib/process.test.d.ts +2 -0
  159. package/dist/lib/process.test.d.ts.map +1 -0
  160. package/dist/lib/process.test.js +44 -0
  161. package/dist/lib/process.test.js.map +1 -0
  162. package/package.json +39 -17
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Harness detector — auto-detect which AI harnesses are present.
3
3
  *
4
- * Instantiates all 8 adapters and checks each for presence in
4
+ * Instantiates all 14 adapters and checks each for presence in
5
5
  * the workspace. Returns a DetectedHarness array for reporting.
6
6
  *
7
7
  * HLD §3.14 — Harness Onboarding Matrix
@@ -1 +1 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/harness/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAWjD,uCAAuC;AACvC,eAAO,MAAM,YAAY,EAAE,eAAe,EASzC,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgBvF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEpE"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/harness/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAiBjD,uCAAuC;AACvC,eAAO,MAAM,YAAY,EAAE,eAAe,EAezC,CAAA;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgBvF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEpE"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Harness detector — auto-detect which AI harnesses are present.
3
3
  *
4
- * Instantiates all 8 adapters and checks each for presence in
4
+ * Instantiates all 14 adapters and checks each for presence in
5
5
  * the workspace. Returns a DetectedHarness array for reporting.
6
6
  *
7
7
  * HLD §3.14 — Harness Onboarding Matrix
@@ -16,6 +16,12 @@ import { aiderAdapter } from './aider.js';
16
16
  import { openhandsAdapter } from './openhands.js';
17
17
  import { codexAdapter } from './codex.js';
18
18
  import { n8nAdapter } from './n8n.js';
19
+ import { clineAdapter } from './cline.js';
20
+ import { rooCodeAdapter } from './rooCode.js';
21
+ import { continueAdapter } from './continue.js';
22
+ import { claudeDesktopAdapter } from './claudeDesktop.js';
23
+ import { gooseAdapter } from './goose.js';
24
+ import { openWebUIAdapter } from './openWebUI.js';
19
25
  import { join } from 'node:path';
20
26
  /** All registered harness adapters. */
21
27
  export const ALL_ADAPTERS = [
@@ -27,6 +33,12 @@ export const ALL_ADAPTERS = [
27
33
  openhandsAdapter,
28
34
  codexAdapter,
29
35
  n8nAdapter,
36
+ clineAdapter,
37
+ rooCodeAdapter,
38
+ continueAdapter,
39
+ claudeDesktopAdapter,
40
+ gooseAdapter,
41
+ openWebUIAdapter,
30
42
  ];
31
43
  /**
32
44
  * Detect which harnesses are present in a workspace.
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/harness/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,UAAU;CACX,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,aAAqB;IACzD,MAAM,OAAO,GAAsB,EAAE,CAAA;IAErC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,cAAc;gBAChC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC;gBAC7C,CAAC,CAAC,EAAE;YACN,QAAQ;YACR,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAClD,CAAC"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/harness/detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAsB;IAC7C,aAAa;IACb,iBAAiB;IACjB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,gBAAgB;IAChB,YAAY;IACZ,UAAU;IACV,YAAY;IACZ,cAAc;IACd,eAAe;IACf,oBAAoB;IACpB,YAAY;IACZ,gBAAgB;CACjB,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,aAAqB;IACzD,MAAM,OAAO,GAAsB,EAAE,CAAA;IAErC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QACpD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,OAAO,CAAC,cAAc;gBAChC,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC;gBAC7C,CAAC,CAAC,EAAE;YACN,QAAQ;YACR,WAAW,EAAE,IAAI;SAClB,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAClD,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * goose.ts — Goose adapter (full implementation).
3
+ *
4
+ * Detects the Goose CLI agent, writes SOP rules, injects the Intutic
5
+ * governance plugin (PreToolUse hooks + immutable flags), and merges
6
+ * the proxy URL into ~/.config/goose/config.yaml.
7
+ *
8
+ * HLD §3.14 — Harness Onboarding Matrix
9
+ * @module
10
+ */
11
+ import type { IHarnessAdapter } from './types.js';
12
+ export declare const gooseAdapter: IHarnessAdapter;
13
+ //# sourceMappingURL=goose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose.d.ts","sourceRoot":"","sources":["../../src/harness/goose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAQjD,eAAO,MAAM,YAAY,EAAE,eA0B1B,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * goose.ts — Goose adapter (full implementation).
3
+ *
4
+ * Detects the Goose CLI agent, writes SOP rules, injects the Intutic
5
+ * governance plugin (PreToolUse hooks + immutable flags), and merges
6
+ * the proxy URL into ~/.config/goose/config.yaml.
7
+ *
8
+ * HLD §3.14 — Harness Onboarding Matrix
9
+ * @module
10
+ */
11
+ import { access } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ import { homedir } from 'node:os';
14
+ import { HarnessType } from '@intutic/shared-types';
15
+ import { hashFile } from '../lib/hash.js';
16
+ import { writeGooseHooks } from '@intutic/sync-daemon/harness/gooseHooks';
17
+ const CONFIG_FILE = '.config/goose/config.yaml';
18
+ const GOOSE_CONFIG = join(homedir(), CONFIG_FILE);
19
+ export const gooseAdapter = {
20
+ type: HarnessType.GOOSE,
21
+ configFileName: CONFIG_FILE,
22
+ async detect(_workspaceRoot) {
23
+ try {
24
+ await access(GOOSE_CONFIG);
25
+ return true;
26
+ }
27
+ catch {
28
+ return false;
29
+ }
30
+ },
31
+ async writeConfig(_workspaceRoot, sops, proxyUrl) {
32
+ // Write governance plugin + config proxy URL (gooseHooks handles both)
33
+ await writeGooseHooks(proxyUrl);
34
+ return GOOSE_CONFIG;
35
+ },
36
+ async readCurrentHash(_workspaceRoot) {
37
+ try {
38
+ return await hashFile(GOOSE_CONFIG);
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ },
44
+ };
45
+ //# sourceMappingURL=goose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goose.js","sourceRoot":"","sources":["../../src/harness/goose.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,MAAM,EAA4B,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AAEzE,MAAM,WAAW,GAAG,2BAA2B,CAAA;AAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAA;AAEjD,MAAM,CAAC,MAAM,YAAY,GAAoB;IAC3C,IAAI,EAAE,WAAW,CAAC,KAAK;IACvB,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;YAC1B,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,IAAoB,EAAE,QAAgB;QAC9E,uEAAuE;QACvE,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;QAC/B,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAA;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -1,11 +1,15 @@
1
1
  /**
2
- * n8n adapter — STUB (Phase 2)
2
+ * n8n adapter — Real-time REST parameter sync.
3
3
  *
4
- * n8n requires API calls to the n8n instance to inject workflow
5
- * parameters, not file writes. Deferred to Phase 2.
4
+ * Interacts with n8n workflow management API (GET/PUT /api/v1/workflows)
5
+ * to inject Intutic proxy URL and SOP governance rules as workflow variables.
6
+ *
7
+ * Supports local n8n instances by falling back to unauthenticated requests
8
+ * if N8N_API_TOKEN is not provided.
6
9
  *
7
- * Tech Debt: TD-037 — n8n API Adapter
8
10
  * HLD §3.14 — Harness Onboarding Matrix
11
+ * Tech Debt: TD-037 — n8n API Adapter
12
+ *
9
13
  * @module
10
14
  */
11
15
  import type { IHarnessAdapter } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"n8n.d.ts","sourceRoot":"","sources":["../../src/harness/n8n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,UAAU,EAAE,eAoBxB,CAAA"}
1
+ {"version":3,"file":"n8n.d.ts","sourceRoot":"","sources":["../../src/harness/n8n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAkBjD,eAAO,MAAM,UAAU,EAAE,eAuGxB,CAAA"}
@@ -1,30 +1,125 @@
1
1
  /**
2
- * n8n adapter — STUB (Phase 2)
2
+ * n8n adapter — Real-time REST parameter sync.
3
3
  *
4
- * n8n requires API calls to the n8n instance to inject workflow
5
- * parameters, not file writes. Deferred to Phase 2.
4
+ * Interacts with n8n workflow management API (GET/PUT /api/v1/workflows)
5
+ * to inject Intutic proxy URL and SOP governance rules as workflow variables.
6
+ *
7
+ * Supports local n8n instances by falling back to unauthenticated requests
8
+ * if N8N_API_TOKEN is not provided.
6
9
  *
7
- * Tech Debt: TD-037 — n8n API Adapter
8
10
  * HLD §3.14 — Harness Onboarding Matrix
11
+ * Tech Debt: TD-037 — n8n API Adapter
12
+ *
9
13
  * @module
10
14
  */
15
+ import { createHash } from 'node:crypto';
11
16
  import { HarnessType } from '@intutic/shared-types';
17
+ // Format SOPs for n8n parameters
18
+ function buildSopsMarkdown(sops) {
19
+ if (sops.length === 0)
20
+ return '';
21
+ return sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n') + '\n';
22
+ }
23
+ function getHeaders() {
24
+ const headers = {
25
+ 'Content-Type': 'application/json',
26
+ };
27
+ if (process.env.N8N_API_TOKEN) {
28
+ headers['X-N8N-API-KEY'] = process.env.N8N_API_TOKEN;
29
+ }
30
+ return headers;
31
+ }
12
32
  export const n8nAdapter = {
13
33
  type: HarnessType.N8N,
14
34
  configFileName: '',
15
35
  async detect(_workspaceRoot) {
16
- // Phase 2 TD-037: n8n API adapter
17
- // Detection would check for n8n instance URL in config or running process
18
- return false;
36
+ const n8nUrl = process.env.N8N_URL || 'http://localhost:5678';
37
+ try {
38
+ const res = await fetch(`${n8nUrl}/api/v1/health`, { signal: AbortSignal.timeout(1000) });
39
+ return res.status === 200 || res.status === 401 || res.status === 403;
40
+ }
41
+ catch {
42
+ return !!process.env.N8N_API_TOKEN;
43
+ }
19
44
  },
20
- async writeConfig(_workspaceRoot, _sops, _proxyUrl) {
21
- // Phase 2 TD-037: n8n API adapter
22
- // Would call n8n REST API to set workflow parameters
23
- return null;
45
+ async writeConfig(_workspaceRoot, sops, proxyUrl) {
46
+ const n8nUrl = process.env.N8N_URL || 'http://localhost:5678';
47
+ const sopsMarkdown = buildSopsMarkdown(sops);
48
+ try {
49
+ // 1. Get list of workflows
50
+ const listRes = await fetch(`${n8nUrl}/api/v1/workflows`, {
51
+ headers: getHeaders(),
52
+ signal: AbortSignal.timeout(5000),
53
+ });
54
+ if (!listRes.ok) {
55
+ throw new Error(`Failed to list workflows: ${listRes.statusText}`);
56
+ }
57
+ const listData = (await listRes.json());
58
+ const workflows = listData.data || [];
59
+ if (workflows.length === 0) {
60
+ return 'n8n:no_workflows';
61
+ }
62
+ // 2. Inject parameters into variables of each workflow
63
+ for (const w of workflows) {
64
+ const detailRes = await fetch(`${n8nUrl}/api/v1/workflows/${w.id}`, {
65
+ headers: getHeaders(),
66
+ signal: AbortSignal.timeout(5000),
67
+ });
68
+ if (!detailRes.ok)
69
+ continue;
70
+ const detail = (await detailRes.json());
71
+ const settings = detail.settings || {};
72
+ const variables = settings.variables || {};
73
+ // Inject Intutic values
74
+ variables.intutic_proxy_url = proxyUrl;
75
+ variables.intutic_governance_rules = sopsMarkdown;
76
+ settings.variables = variables;
77
+ detail.settings = settings;
78
+ // Save updated workflow
79
+ await fetch(`${n8nUrl}/api/v1/workflows/${w.id}`, {
80
+ method: 'PUT',
81
+ headers: getHeaders(),
82
+ body: JSON.stringify(detail),
83
+ signal: AbortSignal.timeout(5000),
84
+ });
85
+ }
86
+ return `n8n:${workflows.length}_workflows`;
87
+ }
88
+ catch (err) {
89
+ console.warn(`[n8n-adapter] failed to sync parameters:`, err);
90
+ return null;
91
+ }
24
92
  },
25
93
  async readCurrentHash(_workspaceRoot) {
26
- // Phase 2 TD-037: n8n API adapter
27
- return null;
94
+ const n8nUrl = process.env.N8N_URL || 'http://localhost:5678';
95
+ try {
96
+ const listRes = await fetch(`${n8nUrl}/api/v1/workflows`, {
97
+ headers: getHeaders(),
98
+ signal: AbortSignal.timeout(3000),
99
+ });
100
+ if (!listRes.ok)
101
+ return null;
102
+ const listData = (await listRes.json());
103
+ const workflows = listData.data || [];
104
+ if (workflows.length === 0)
105
+ return null;
106
+ // Fetch the first workflow's variables to compute the hash
107
+ const firstId = workflows[0].id;
108
+ const detailRes = await fetch(`${n8nUrl}/api/v1/workflows/${firstId}`, {
109
+ headers: getHeaders(),
110
+ signal: AbortSignal.timeout(3000),
111
+ });
112
+ if (!detailRes.ok)
113
+ return null;
114
+ const detail = (await detailRes.json());
115
+ const rules = detail.settings?.variables?.intutic_governance_rules || '';
116
+ if (!rules)
117
+ return null;
118
+ return createHash('sha256').update(rules, 'utf-8').digest('hex');
119
+ }
120
+ catch {
121
+ return null;
122
+ }
28
123
  },
29
124
  };
30
125
  //# sourceMappingURL=n8n.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"n8n.js","sourceRoot":"","sources":["../../src/harness/n8n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAInD,MAAM,CAAC,MAAM,UAAU,GAAoB;IACzC,IAAI,EAAE,WAAW,CAAC,GAAG;IACrB,cAAc,EAAE,EAAE;IAElB,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,oCAAoC;QACpC,0EAA0E;QAC1E,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,cAAsB,EAAE,KAAqB,EAAE,SAAiB;QAChF,oCAAoC;QACpC,qDAAqD;QACrD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,oCAAoC;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"n8n.js","sourceRoot":"","sources":["../../src/harness/n8n.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * OpenWebUI adapter — detection-only stub for the OpenWebUI interface.
3
+ *
4
+ * OpenWebUI is a Docker-based service and cannot be reliably detected
5
+ * via filesystem checks. Detection always returns false; the harness
6
+ * can be manually enabled via CLI flags or org config.
7
+ *
8
+ * HLD §3.14 — Harness Onboarding Matrix
9
+ * @module
10
+ */
11
+ import type { IHarnessAdapter } from './types.js';
12
+ export declare const openWebUIAdapter: IHarnessAdapter;
13
+ //# sourceMappingURL=openWebUI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openWebUI.d.ts","sourceRoot":"","sources":["../../src/harness/openWebUI.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,gBAAgB,EAAE,eAe9B,CAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * OpenWebUI adapter — detection-only stub for the OpenWebUI interface.
3
+ *
4
+ * OpenWebUI is a Docker-based service and cannot be reliably detected
5
+ * via filesystem checks. Detection always returns false; the harness
6
+ * can be manually enabled via CLI flags or org config.
7
+ *
8
+ * HLD §3.14 — Harness Onboarding Matrix
9
+ * @module
10
+ */
11
+ import { HarnessType } from '@intutic/shared-types';
12
+ export const openWebUIAdapter = {
13
+ type: HarnessType.OPEN_WEBUI,
14
+ configFileName: '',
15
+ async detect(_workspaceRoot) {
16
+ return false;
17
+ },
18
+ async writeConfig() {
19
+ return null;
20
+ },
21
+ async readCurrentHash() {
22
+ return null;
23
+ },
24
+ };
25
+ //# sourceMappingURL=openWebUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openWebUI.js","sourceRoot":"","sources":["../../src/harness/openWebUI.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,WAAW,CAAC,UAAU;IAC5B,cAAc,EAAE,EAAE;IAElB,KAAK,CAAC,MAAM,CAAC,cAAsB;QACjC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * OpenHands adapter config.toml
2
+ * openhands.ts — OpenHands adapter (full implementation with hooks + llm.base_url).
3
3
  *
4
- * Writes SOP content into a [intutic] section of the
5
- * OpenHands TOML config file.
4
+ * Writes SOP content into config.toml, injects PreToolUse hooks via
5
+ * .openhands/hooks.json, and writes llm.base_url into the [llm] section.
6
6
  *
7
7
  * HLD §3.14 — Harness Onboarding Matrix
8
8
  * @module
@@ -1 +1 @@
1
- {"version":3,"file":"openhands.d.ts","sourceRoot":"","sources":["../../src/harness/openhands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAMjD,eAAO,MAAM,gBAAgB,EAAE,eAiD9B,CAAA"}
1
+ {"version":3,"file":"openhands.d.ts","sourceRoot":"","sources":["../../src/harness/openhands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAOjD,eAAO,MAAM,gBAAgB,EAAE,eAuD9B,CAAA"}
@@ -1,8 +1,8 @@
1
1
  /**
2
- * OpenHands adapter config.toml
2
+ * openhands.ts — OpenHands adapter (full implementation with hooks + llm.base_url).
3
3
  *
4
- * Writes SOP content into a [intutic] section of the
5
- * OpenHands TOML config file.
4
+ * Writes SOP content into config.toml, injects PreToolUse hooks via
5
+ * .openhands/hooks.json, and writes llm.base_url into the [llm] section.
6
6
  *
7
7
  * HLD §3.14 — Harness Onboarding Matrix
8
8
  * @module
@@ -12,6 +12,7 @@ import { access, writeFile, rename, mkdir } from 'node:fs/promises';
12
12
  import { HarnessType } from '@intutic/shared-types';
13
13
  import { hashFile } from '../lib/hash.js';
14
14
  import { newIso } from '@intutic/id';
15
+ import { writeOpenHandsHooks } from '@intutic/sync-daemon/harness/openhandsHooks';
15
16
  const CONFIG_FILE = 'config.toml';
16
17
  export const openhandsAdapter = {
17
18
  type: HarnessType.OPENHANDS,
@@ -26,14 +27,12 @@ export const openhandsAdapter = {
26
27
  }
27
28
  },
28
29
  async writeConfig(workspaceRoot, sops, proxyUrl) {
29
- if (sops.length === 0)
30
- return null;
31
30
  const filePath = join(workspaceRoot, CONFIG_FILE);
32
31
  const tmpPath = filePath + '.intutic-tmp';
33
- const instructions = sops
34
- .map((sop) => `## ${sop.title}\n\n${sop.content}`)
35
- .join('\n\n---\n\n');
36
- // TOML format — [intutic] section with multi-line string
32
+ const instructions = sops.length > 0
33
+ ? sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n')
34
+ : '# Intutic governance active — no SOP rules configured yet.';
35
+ // TOML — [intutic] section for SOP text + [llm] for proxy base_url
37
36
  const toml = [
38
37
  '# Intutic Governance Rules (auto-generated)',
39
38
  '# DO NOT EDIT — managed by intutic sync daemon',
@@ -45,10 +44,15 @@ export const openhandsAdapter = {
45
44
  instructions,
46
45
  '"""',
47
46
  '',
47
+ '[llm]',
48
+ `base_url = "${proxyUrl}"`,
49
+ '',
48
50
  ].join('\n');
49
51
  await mkdir(dirname(filePath), { recursive: true });
50
52
  await writeFile(tmpPath, toml, 'utf-8');
51
53
  await rename(tmpPath, filePath);
54
+ // Inject .openhands/hooks.json PreToolUse hook
55
+ await writeOpenHandsHooks(workspaceRoot, proxyUrl);
52
56
  return filePath;
53
57
  },
54
58
  async readCurrentHash(workspaceRoot) {
@@ -1 +1 @@
1
- {"version":3,"file":"openhands.js","sourceRoot":"","sources":["../../src/harness/openhands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,WAAW,GAAG,aAAa,CAAA;AAEjC,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,WAAW,CAAC,SAAS;IAC3B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI;aACtB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC;aACjD,IAAI,CAAC,aAAa,CAAC,CAAA;QAEtB,yDAAyD;QACzD,MAAM,IAAI,GAAG;YACX,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,EAAE;YACF,WAAW;YACX,gBAAgB,QAAQ,GAAG;YAC3B,oBAAoB;YACpB,YAAY;YACZ,KAAK;YACL,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC/B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"openhands.js","sourceRoot":"","sources":["../../src/harness/openhands.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAA;AAEjF,MAAM,WAAW,GAAG,aAAa,CAAA;AAEjC,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,WAAW,CAAC,SAAS;IAC3B,cAAc,EAAE,WAAW;IAE3B,KAAK,CAAC,MAAM,CAAC,aAAqB;QAChC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;YAC9C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,aAAqB,EAAE,IAAoB,EAAE,QAAgB;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACjD,MAAM,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YAC5E,CAAC,CAAC,4DAA4D,CAAA;QAEhE,mEAAmE;QACnE,MAAM,IAAI,GAAG;YACX,6CAA6C;YAC7C,gDAAgD;YAChD,gBAAgB,MAAM,EAAE,EAAE;YAC1B,EAAE;YACF,WAAW;YACX,gBAAgB,QAAQ,GAAG;YAC3B,oBAAoB;YACpB,YAAY;YACZ,KAAK;YACL,EAAE;YACF,OAAO;YACP,eAAe,QAAQ,GAAG;YAC1B,EAAE;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEZ,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,MAAM,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE/B,+CAA+C;QAC/C,MAAM,mBAAmB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;QAElD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAqB;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAA;QACzD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;CACF,CAAA"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * rooCode.ts — Roo Code adapter (full implementation).
3
+ *
4
+ * Detects the Roo Code VS Code extension, writes Intutic governance rules
5
+ * as .roorules, and configures the proxy base URL via VS Code settings +
6
+ * .env.intutic sidecar. Roo Code's notification hooks are not yet blocking
7
+ * so we rely on proxy (Vector B) and drift guard (Vector C).
8
+ *
9
+ * HLD §3.14 — Harness Onboarding Matrix
10
+ * @module
11
+ */
12
+ import type { IHarnessAdapter } from './types.js';
13
+ export declare const rooCodeAdapter: IHarnessAdapter;
14
+ //# sourceMappingURL=rooCode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rooCode.d.ts","sourceRoot":"","sources":["../../src/harness/rooCode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAOjD,eAAO,MAAM,cAAc,EAAE,eA6D5B,CAAA"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * rooCode.ts — Roo Code adapter (full implementation).
3
+ *
4
+ * Detects the Roo Code VS Code extension, writes Intutic governance rules
5
+ * as .roorules, and configures the proxy base URL via VS Code settings +
6
+ * .env.intutic sidecar. Roo Code's notification hooks are not yet blocking
7
+ * so we rely on proxy (Vector B) and drift guard (Vector C).
8
+ *
9
+ * HLD §3.14 — Harness Onboarding Matrix
10
+ * @module
11
+ */
12
+ import { access, readdir, writeFile, rename, mkdir } from 'node:fs/promises';
13
+ import { join, dirname } from 'node:path';
14
+ import { homedir } from 'node:os';
15
+ import { HarnessType } from '@intutic/shared-types';
16
+ import { hashFile } from '../lib/hash.js';
17
+ import { newIso } from '@intutic/id';
18
+ import { injectRooCodeProxySettings } from './vscodeSettingsWriter.js';
19
+ const CONFIG_FILE = '.roorules';
20
+ export const rooCodeAdapter = {
21
+ type: HarnessType.ROO_CODE,
22
+ configFileName: CONFIG_FILE,
23
+ async detect(workspaceRoot) {
24
+ // Check for .roomodes or .roorules in workspace
25
+ for (const marker of ['.roomodes', '.roorules']) {
26
+ try {
27
+ await access(join(workspaceRoot, marker));
28
+ return true;
29
+ }
30
+ catch {
31
+ // fall through
32
+ }
33
+ }
34
+ // Check for VS Code extension directory
35
+ try {
36
+ const extensionsDir = join(homedir(), '.vscode', 'extensions');
37
+ const entries = await readdir(extensionsDir);
38
+ return entries.some((entry) => entry.startsWith('rooveterinaryinc.roo-cline-'));
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ },
44
+ async writeConfig(workspaceRoot, sops, proxyUrl) {
45
+ // 1. Write .roorules governance text
46
+ const filePath = join(workspaceRoot, CONFIG_FILE);
47
+ const instructions = sops.length > 0
48
+ ? sops.map((sop) => `## ${sop.title}\n\n${sop.content}`).join('\n\n---\n\n')
49
+ : '# Intutic governance active — no SOP rules configured yet.';
50
+ const content = [
51
+ '# Intutic Governance Rules (auto-generated)',
52
+ '# DO NOT EDIT — managed by intutic sync daemon',
53
+ `# Last sync: ${newIso()}`,
54
+ '# NOTE: Roo Code notification hooks are not blocking.',
55
+ '# Governance is enforced via proxy (Vector B) and drift guard (Vector C).',
56
+ '',
57
+ instructions,
58
+ '',
59
+ ].join('\n');
60
+ await mkdir(dirname(filePath), { recursive: true });
61
+ const tmp = filePath + '.intutic-tmp';
62
+ await writeFile(tmp, content, 'utf-8');
63
+ await rename(tmp, filePath);
64
+ // 2. Inject proxy URL into VS Code settings + .env.intutic sidecar
65
+ await injectRooCodeProxySettings(workspaceRoot, proxyUrl);
66
+ return filePath;
67
+ },
68
+ async readCurrentHash(workspaceRoot) {
69
+ try {
70
+ return await hashFile(join(workspaceRoot, CONFIG_FILE));
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ },
76
+ };
77
+ //# sourceMappingURL=rooCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rooCode.js","sourceRoot":"","sources":["../../src/harness/rooCode.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEtE,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,+DAA+D;IAC/D,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClG,4FAA4F;IAC5F,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/D;AAED,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAY5D,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEtE,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,+DAA+D;IAC/D,MAAM,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;;;OAGG;IACH,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAClG,4FAA4F;IAC5F,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CAC/D;AAED,4DAA4D;AAC5D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAkB5D,CAAA"}
@@ -21,5 +21,11 @@ export const HARNESS_CONFIG_FILES = {
21
21
  'openclaw': '', // Phase 2 — TD-037
22
22
  'hermes': '', // Phase 2 — TD-037
23
23
  'pi': '', // Phase 2 — TD-037
24
+ 'cline': '',
25
+ 'roo-code': '',
26
+ 'continue': '',
27
+ 'claude-desktop': '',
28
+ 'goose': '',
29
+ 'open-webui': '',
24
30
  };
25
31
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,EAAE,EAAE,6CAA6C;IACxD,UAAU,EAAE,EAAE,EAAE,mBAAmB;IACnC,QAAQ,EAAE,EAAE,EAAE,mBAAmB;IACjC,IAAI,EAAE,EAAE,EAAE,mBAAmB;CAC9B,CAAA"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/harness/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqBH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,oBAAoB,GAAgC;IAC/D,QAAQ,EAAE,cAAc;IACxB,aAAa,EAAE,WAAW;IAC1B,aAAa,EAAE,uBAAuB;IACtC,UAAU,EAAE,gBAAgB;IAC5B,OAAO,EAAE,iBAAiB;IAC1B,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,EAAE,EAAE,6CAA6C;IACxD,UAAU,EAAE,EAAE,EAAE,mBAAmB;IACnC,QAAQ,EAAE,EAAE,EAAE,mBAAmB;IACjC,IAAI,EAAE,EAAE,EAAE,mBAAmB;IAC7B,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,EAAE;IACpB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;CACjB,CAAA"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * vscodeSettingsWriter.ts — VS Code settings.json proxy injection.
3
+ *
4
+ * Shared by the Cline and Roo Code adapters. Merges Intutic proxy
5
+ * API base URL keys into:
6
+ * - macOS: ~/Library/Application Support/Code/User/settings.json
7
+ * - Linux: ~/.config/Code/User/settings.json
8
+ * - Workspace: <workspaceRoot>/.vscode/settings.json
9
+ *
10
+ * Also writes ~/.intutic/.env.intutic with exported env vars for
11
+ * shells that source it before launching VS Code.
12
+ *
13
+ * LLD #14 — Phase 3 cross-harness defence
14
+ * HLD §3.14 — Three-Tier Defense Cascade
15
+ *
16
+ * @module
17
+ */
18
+ /**
19
+ * Settings keys injected for each harness.
20
+ * These are checked during drift detection and restored on tamper.
21
+ */
22
+ export declare const CLINE_PROXY_KEYS: readonly ["cline.apiBase", "cline.openAiBaseUrl"];
23
+ export declare const ROO_CODE_PROXY_KEYS: readonly ["roo-cline.openAiBaseUrl", "roo-cline.apiBase"];
24
+ /**
25
+ * Merge Intutic proxy URL into VS Code user + workspace settings.json
26
+ * for the Cline extension.
27
+ */
28
+ export declare function injectClineProxySettings(workspaceRoot: string, proxyUrl: string): Promise<void>;
29
+ /**
30
+ * Merge Intutic proxy URL into VS Code user + workspace settings.json
31
+ * for the Roo Code extension.
32
+ */
33
+ export declare function injectRooCodeProxySettings(workspaceRoot: string, proxyUrl: string): Promise<void>;
34
+ /**
35
+ * Write (or update) ~/.intutic/.env.intutic with proxy env vars.
36
+ * Users/CI pipelines can `source ~/.intutic/.env.intutic` to get proxy routing
37
+ * for any harness that respects OPENAI_BASE_URL / ANTHROPIC_BASE_URL.
38
+ */
39
+ export declare function writeEnvSidecar(proxyUrl: string): Promise<void>;
40
+ //# sourceMappingURL=vscodeSettingsWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vscodeSettingsWriter.d.ts","sourceRoot":"","sources":["../../src/harness/vscodeSettingsWriter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAsBH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,mDAAoD,CAAA;AACjF,eAAO,MAAM,mBAAmB,2DAA4D,CAAA;AAE5F;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBrE"}