@autonav/core 1.6.0 → 1.8.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 (247) hide show
  1. package/README.md +2 -2
  2. package/dist/adapter/index.d.ts +3 -3
  3. package/dist/adapter/index.d.ts.map +1 -1
  4. package/dist/adapter/index.js +3 -3
  5. package/dist/adapter/index.js.map +1 -1
  6. package/dist/adapter/{claude-adapter.d.ts → navigator-adapter.d.ts} +18 -11
  7. package/dist/adapter/navigator-adapter.d.ts.map +1 -0
  8. package/dist/adapter/{claude-adapter.js → navigator-adapter.js} +165 -127
  9. package/dist/adapter/navigator-adapter.js.map +1 -0
  10. package/dist/cli/autonav.d.ts +2 -6
  11. package/dist/cli/autonav.d.ts.map +1 -1
  12. package/dist/cli/autonav.js +32 -53
  13. package/dist/cli/autonav.js.map +1 -1
  14. package/dist/cli/nav-chat.d.ts +2 -1
  15. package/dist/cli/nav-chat.d.ts.map +1 -1
  16. package/dist/cli/nav-chat.js +35 -4
  17. package/dist/cli/nav-chat.js.map +1 -1
  18. package/dist/cli/nav-init.d.ts +2 -1
  19. package/dist/cli/nav-init.d.ts.map +1 -1
  20. package/dist/cli/nav-init.js +12 -4
  21. package/dist/cli/nav-init.js.map +1 -1
  22. package/dist/cli/nav-install.d.ts +2 -1
  23. package/dist/cli/nav-install.d.ts.map +1 -1
  24. package/dist/cli/nav-install.js +4 -2
  25. package/dist/cli/nav-install.js.map +1 -1
  26. package/dist/cli/nav-memento.d.ts +3 -2
  27. package/dist/cli/nav-memento.d.ts.map +1 -1
  28. package/dist/cli/nav-memento.js +12 -6
  29. package/dist/cli/nav-memento.js.map +1 -1
  30. package/dist/cli/nav-mend.d.ts +2 -1
  31. package/dist/cli/nav-mend.d.ts.map +1 -1
  32. package/dist/cli/nav-mend.js +4 -1
  33. package/dist/cli/nav-mend.js.map +1 -1
  34. package/dist/cli/nav-migrate.d.ts +2 -1
  35. package/dist/cli/nav-migrate.d.ts.map +1 -1
  36. package/dist/cli/nav-migrate.js +2 -6
  37. package/dist/cli/nav-migrate.js.map +1 -1
  38. package/dist/cli/nav-query.d.ts +2 -1
  39. package/dist/cli/nav-query.d.ts.map +1 -1
  40. package/dist/cli/nav-query.js +12 -6
  41. package/dist/cli/nav-query.js.map +1 -1
  42. package/dist/cli/nav-standup.d.ts +18 -0
  43. package/dist/cli/nav-standup.d.ts.map +1 -0
  44. package/dist/cli/nav-standup.js +151 -0
  45. package/dist/cli/nav-standup.js.map +1 -0
  46. package/dist/cli/nav-uninstall.d.ts +2 -1
  47. package/dist/cli/nav-uninstall.d.ts.map +1 -1
  48. package/dist/cli/nav-uninstall.js +4 -2
  49. package/dist/cli/nav-uninstall.js.map +1 -1
  50. package/dist/cli/nav-update.d.ts +2 -1
  51. package/dist/cli/nav-update.d.ts.map +1 -1
  52. package/dist/cli/nav-update.js +11 -6
  53. package/dist/cli/nav-update.js.map +1 -1
  54. package/dist/conversation/App.d.ts +11 -2
  55. package/dist/conversation/App.d.ts.map +1 -1
  56. package/dist/conversation/App.js +305 -112
  57. package/dist/conversation/App.js.map +1 -1
  58. package/dist/conversation/index.d.ts +7 -0
  59. package/dist/conversation/index.d.ts.map +1 -1
  60. package/dist/conversation/index.js +17 -2
  61. package/dist/conversation/index.js.map +1 -1
  62. package/dist/conversation/prompts.d.ts +1 -1
  63. package/dist/conversation/prompts.d.ts.map +1 -1
  64. package/dist/conversation/prompts.js +42 -1
  65. package/dist/conversation/prompts.js.map +1 -1
  66. package/dist/harness/chibi-harness.d.ts +36 -0
  67. package/dist/harness/chibi-harness.d.ts.map +1 -0
  68. package/dist/harness/chibi-harness.js +383 -0
  69. package/dist/harness/chibi-harness.js.map +1 -0
  70. package/dist/harness/chibi-plugins/get_plugin_config +64 -0
  71. package/dist/harness/chibi-plugins/query_navigator +114 -0
  72. package/dist/harness/chibi-plugins/submit_answer +38 -0
  73. package/dist/harness/chibi-plugins/update_plugin_config +91 -0
  74. package/dist/harness/claude-code-harness.d.ts +24 -0
  75. package/dist/harness/claude-code-harness.d.ts.map +1 -0
  76. package/dist/harness/claude-code-harness.js +242 -0
  77. package/dist/harness/claude-code-harness.js.map +1 -0
  78. package/dist/harness/ephemeral-home.d.ts +34 -0
  79. package/dist/harness/ephemeral-home.d.ts.map +1 -0
  80. package/dist/harness/ephemeral-home.js +56 -0
  81. package/dist/harness/ephemeral-home.js.map +1 -0
  82. package/dist/harness/factory.d.ts +47 -0
  83. package/dist/harness/factory.d.ts.map +1 -0
  84. package/dist/harness/factory.js +84 -0
  85. package/dist/harness/factory.js.map +1 -0
  86. package/dist/harness/helpers.d.ts +58 -0
  87. package/dist/harness/helpers.d.ts.map +1 -0
  88. package/dist/harness/helpers.js +78 -0
  89. package/dist/harness/helpers.js.map +1 -0
  90. package/dist/harness/index.d.ts +14 -0
  91. package/dist/harness/index.d.ts.map +1 -0
  92. package/dist/harness/index.js +13 -0
  93. package/dist/harness/index.js.map +1 -0
  94. package/dist/harness/opencode-harness.d.ts +79 -0
  95. package/dist/harness/opencode-harness.d.ts.map +1 -0
  96. package/dist/harness/opencode-harness.js +537 -0
  97. package/dist/harness/opencode-harness.js.map +1 -0
  98. package/dist/harness/opencode-tools/get_plugin_config.ts +72 -0
  99. package/dist/harness/opencode-tools/query_navigator.ts +126 -0
  100. package/dist/harness/opencode-tools/submit_answer.ts +40 -0
  101. package/dist/harness/opencode-tools/update_plugin_config.ts +105 -0
  102. package/dist/harness/sandbox.d.ts +59 -0
  103. package/dist/harness/sandbox.d.ts.map +1 -0
  104. package/dist/harness/sandbox.js +152 -0
  105. package/dist/harness/sandbox.js.map +1 -0
  106. package/dist/harness/tool-server.d.ts +50 -0
  107. package/dist/harness/tool-server.d.ts.map +1 -0
  108. package/dist/harness/tool-server.js +27 -0
  109. package/dist/harness/tool-server.js.map +1 -0
  110. package/dist/harness/types.d.ts +168 -0
  111. package/dist/harness/types.d.ts.map +1 -0
  112. package/dist/harness/types.js +12 -0
  113. package/dist/harness/types.js.map +1 -0
  114. package/dist/index.d.ts +3 -2
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +4 -2
  117. package/dist/index.js.map +1 -1
  118. package/dist/interview/App.d.ts +4 -2
  119. package/dist/interview/App.d.ts.map +1 -1
  120. package/dist/interview/App.js +36 -56
  121. package/dist/interview/App.js.map +1 -1
  122. package/dist/interview/index.d.ts +3 -0
  123. package/dist/interview/index.d.ts.map +1 -1
  124. package/dist/interview/index.js +1 -0
  125. package/dist/interview/index.js.map +1 -1
  126. package/dist/interview/prompts.d.ts +3 -1
  127. package/dist/interview/prompts.d.ts.map +1 -1
  128. package/dist/interview/prompts.js +14 -1
  129. package/dist/interview/prompts.js.map +1 -1
  130. package/dist/interview/ui/ChatBanner.d.ts +17 -0
  131. package/dist/interview/ui/ChatBanner.d.ts.map +1 -0
  132. package/dist/interview/ui/ChatBanner.js +30 -0
  133. package/dist/interview/ui/ChatBanner.js.map +1 -0
  134. package/dist/interview/ui/ChatInput.d.ts +36 -0
  135. package/dist/interview/ui/ChatInput.d.ts.map +1 -0
  136. package/dist/interview/ui/ChatInput.js +304 -0
  137. package/dist/interview/ui/ChatInput.js.map +1 -0
  138. package/dist/interview/ui/MarkdownText.d.ts +13 -0
  139. package/dist/interview/ui/MarkdownText.d.ts.map +1 -0
  140. package/dist/interview/ui/MarkdownText.js +107 -0
  141. package/dist/interview/ui/MarkdownText.js.map +1 -0
  142. package/dist/interview/ui/index.d.ts +3 -0
  143. package/dist/interview/ui/index.d.ts.map +1 -1
  144. package/dist/interview/ui/index.js +3 -0
  145. package/dist/interview/ui/index.js.map +1 -1
  146. package/dist/memento/implementer-agent.d.ts +31 -0
  147. package/dist/memento/implementer-agent.d.ts.map +1 -0
  148. package/dist/memento/implementer-agent.js +95 -0
  149. package/dist/memento/implementer-agent.js.map +1 -0
  150. package/dist/memento/index.d.ts +6 -5
  151. package/dist/memento/index.d.ts.map +1 -1
  152. package/dist/memento/index.js +7 -5
  153. package/dist/memento/index.js.map +1 -1
  154. package/dist/memento/loop.d.ts +6 -5
  155. package/dist/memento/loop.d.ts.map +1 -1
  156. package/dist/memento/loop.js +872 -180
  157. package/dist/memento/loop.js.map +1 -1
  158. package/dist/memento/matrix-animation.d.ts +26 -0
  159. package/dist/memento/matrix-animation.d.ts.map +1 -1
  160. package/dist/memento/matrix-animation.js +93 -18
  161. package/dist/memento/matrix-animation.js.map +1 -1
  162. package/dist/memento/nav-protocol.d.ts +2 -2
  163. package/dist/memento/nav-protocol.d.ts.map +1 -1
  164. package/dist/memento/nav-protocol.js +39 -43
  165. package/dist/memento/nav-protocol.js.map +1 -1
  166. package/dist/memento/prompts.d.ts +21 -8
  167. package/dist/memento/prompts.d.ts.map +1 -1
  168. package/dist/memento/prompts.js +79 -39
  169. package/dist/memento/prompts.js.map +1 -1
  170. package/dist/memento/rate-limit.d.ts +85 -0
  171. package/dist/memento/rate-limit.d.ts.map +1 -0
  172. package/dist/memento/rate-limit.js +221 -0
  173. package/dist/memento/rate-limit.js.map +1 -0
  174. package/dist/memento/types.d.ts +6 -6
  175. package/dist/memento/types.d.ts.map +1 -1
  176. package/dist/memento/types.js +3 -3
  177. package/dist/registry.d.ts +35 -0
  178. package/dist/registry.d.ts.map +1 -0
  179. package/dist/registry.js +87 -0
  180. package/dist/registry.js.map +1 -0
  181. package/dist/repo-analyzer/index.d.ts +2 -1
  182. package/dist/repo-analyzer/index.d.ts.map +1 -1
  183. package/dist/repo-analyzer/index.js +6 -17
  184. package/dist/repo-analyzer/index.js.map +1 -1
  185. package/dist/standup/config.d.ts +19 -0
  186. package/dist/standup/config.d.ts.map +1 -0
  187. package/dist/standup/config.js +42 -0
  188. package/dist/standup/config.js.map +1 -0
  189. package/dist/standup/index.d.ts +24 -0
  190. package/dist/standup/index.d.ts.map +1 -0
  191. package/dist/standup/index.js +29 -0
  192. package/dist/standup/index.js.map +1 -0
  193. package/dist/standup/loop.d.ts +36 -0
  194. package/dist/standup/loop.d.ts.map +1 -0
  195. package/dist/standup/loop.js +508 -0
  196. package/dist/standup/loop.js.map +1 -0
  197. package/dist/standup/prompts.d.ts +62 -0
  198. package/dist/standup/prompts.d.ts.map +1 -0
  199. package/dist/standup/prompts.js +211 -0
  200. package/dist/standup/prompts.js.map +1 -0
  201. package/dist/standup/standup-protocol.d.ts +33 -0
  202. package/dist/standup/standup-protocol.d.ts.map +1 -0
  203. package/dist/standup/standup-protocol.js +189 -0
  204. package/dist/standup/standup-protocol.js.map +1 -0
  205. package/dist/standup/types.d.ts +185 -0
  206. package/dist/standup/types.d.ts.map +1 -0
  207. package/dist/standup/types.js +67 -0
  208. package/dist/standup/types.js.map +1 -0
  209. package/dist/tools/cross-nav.d.ts +21 -0
  210. package/dist/tools/cross-nav.d.ts.map +1 -0
  211. package/dist/tools/cross-nav.js +93 -0
  212. package/dist/tools/cross-nav.js.map +1 -0
  213. package/dist/tools/index.d.ts +1 -0
  214. package/dist/tools/index.d.ts.map +1 -1
  215. package/dist/tools/index.js +1 -0
  216. package/dist/tools/index.js.map +1 -1
  217. package/dist/tools/related-navs-config.d.ts +15 -0
  218. package/dist/tools/related-navs-config.d.ts.map +1 -0
  219. package/dist/tools/related-navs-config.js +132 -0
  220. package/dist/tools/related-navs-config.js.map +1 -0
  221. package/dist/tools/related-navs.d.ts +23 -0
  222. package/dist/tools/related-navs.d.ts.map +1 -0
  223. package/dist/tools/related-navs.js +107 -0
  224. package/dist/tools/related-navs.js.map +1 -0
  225. package/dist/tools/response.d.ts +3 -2
  226. package/dist/tools/response.d.ts.map +1 -1
  227. package/dist/tools/response.js +7 -11
  228. package/dist/tools/response.js.map +1 -1
  229. package/dist/tools/self-config.d.ts +2 -1
  230. package/dist/tools/self-config.d.ts.map +1 -1
  231. package/dist/tools/self-config.js +5 -9
  232. package/dist/tools/self-config.js.map +1 -1
  233. package/package.json +7 -4
  234. package/dist/adapter/claude-adapter.d.ts.map +0 -1
  235. package/dist/adapter/claude-adapter.js.map +0 -1
  236. package/dist/memento/state.d.ts +0 -56
  237. package/dist/memento/state.d.ts.map +0 -1
  238. package/dist/memento/state.js +0 -156
  239. package/dist/memento/state.js.map +0 -1
  240. package/dist/memento/worker-agent.d.ts +0 -30
  241. package/dist/memento/worker-agent.d.ts.map +0 -1
  242. package/dist/memento/worker-agent.js +0 -109
  243. package/dist/memento/worker-agent.js.map +0 -1
  244. package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts +0 -18
  245. package/dist/migrations/versions/v1.4.0-rfc2119-skills.d.ts.map +0 -1
  246. package/dist/migrations/versions/v1.4.0-rfc2119-skills.js +0 -207
  247. package/dist/migrations/versions/v1.4.0-rfc2119-skills.js.map +0 -1
@@ -1,11 +1,51 @@
1
1
  /**
2
2
  * Conversation prompts for interactive nav management
3
3
  */
4
+ import { describeConfigSchema } from "@autonav/communication-layer";
5
+ // Cache the schema description (it's derived from a static Zod schema)
6
+ let _cachedSchemaDescription;
7
+ function getSchemaDescription() {
8
+ if (!_cachedSchemaDescription) {
9
+ _cachedSchemaDescription = describeConfigSchema();
10
+ }
11
+ return _cachedSchemaDescription;
12
+ }
4
13
  /**
5
14
  * Build a system prompt for conversation mode
6
15
  * Incorporates the navigator's own CLAUDE.md plus conversation-specific guidance
7
16
  */
8
- export function buildConversationSystemPrompt(navigatorName, navigatorSystemPrompt, knowledgeBasePath) {
17
+ export function buildConversationSystemPrompt(navigatorName, navigatorSystemPrompt, knowledgeBasePath, configJson) {
18
+ let configSection = "";
19
+ if (configJson) {
20
+ configSection = `
21
+
22
+ ### Your Configuration (config.json)
23
+
24
+ Your current configuration:
25
+
26
+ \`\`\`json
27
+ ${configJson}
28
+ \`\`\`
29
+
30
+ #### config.json Schema
31
+
32
+ ${getSchemaDescription()}
33
+
34
+ #### How to Update Your Configuration
35
+
36
+ You can read and modify your own \`config.json\` to change your behavior. To update:
37
+
38
+ 1. Read \`config.json\` from your navigator root
39
+ 2. Parse the JSON, modify the desired fields
40
+ 3. Write the updated JSON back to \`config.json\`
41
+
42
+ Common self-configuration examples:
43
+ - Add a related navigator: add an entry to \`relatedNavigators\`
44
+ - Change sandbox settings: modify \`sandbox\` per-operation flags
45
+ - Add tool access: add tool names to \`sandbox.allowedTools\` (e.g., \`["Bash"]\`)
46
+ - Update your description: change \`description\`
47
+ - Add working directories: add paths to \`workingDirectories\``;
48
+ }
9
49
  return `${navigatorSystemPrompt}
10
50
 
11
51
  ---
@@ -26,6 +66,7 @@ You are now in **conversation mode** with the user. This is an interactive sessi
26
66
 
27
67
  - **Name**: ${navigatorName}
28
68
  - **Knowledge Base**: ${knowledgeBasePath}
69
+ ${configSection}
29
70
 
30
71
  ### Guidelines
31
72
 
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/conversation/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,aAAqB,EACrB,qBAA6B,EAC7B,iBAAyB;IAEzB,OAAO,GAAG,qBAAqB;;;;;;;;;;;;;;;;;;cAkBnB,aAAa;wBACH,iBAAiB;;;;;;;;;;;;;;;;;gEAiBuB,CAAC;AACjE,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/conversation/prompts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,uEAAuE;AACvE,IAAI,wBAA4C,CAAC;AACjD,SAAS,oBAAoB;IAC3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9B,wBAAwB,GAAG,oBAAoB,EAAE,CAAC;IACpD,CAAC;IACD,OAAO,wBAAwB,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAC3C,aAAqB,EACrB,qBAA6B,EAC7B,iBAAyB,EACzB,UAAmB;IAEnB,IAAI,aAAa,GAAG,EAAE,CAAC;IAEvB,IAAI,UAAU,EAAE,CAAC;QACf,aAAa,GAAG;;;;;;;EAOlB,UAAU;;;;;EAKV,oBAAoB,EAAE;;;;;;;;;;;;;;;+DAeuC,CAAC;IAC9D,CAAC;IAED,OAAO,GAAG,qBAAqB;;;;;;;;;;;;;;;;;;cAkBnB,aAAa;wBACH,iBAAiB;EACvC,aAAa;;;;;;;;;;;;;;;;;gEAiBiD,CAAC;AACjE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Chibi Harness
3
+ *
4
+ * Adapts chibi-json into the universal Harness interface.
5
+ *
6
+ * chibi-json is stateless per invocation: each call reads ONE JSON object
7
+ * from stdin, executes the command, outputs JSONL to stdout, and exits.
8
+ * Multi-turn continuity comes from the named `context` — chibi persists
9
+ * conversation history on disk keyed by context name.
10
+ *
11
+ * Protocol (from `chibi-json --json-schema`):
12
+ * Input: { command: Command, context: string, project_root?: string, flags?: ExecutionFlags }
13
+ * Output: JSONL lines — transcript entries (entry_type: "message"|"tool_call"|"tool_result")
14
+ * and error objects (type: "error", message: string)
15
+ *
16
+ * Session lifecycle:
17
+ * 1. set_system_prompt (separate invocation, no output)
18
+ * 2. send_prompt (separate invocation, streams JSONL output)
19
+ * 3. For multi-turn: send_prompt again with same context name
20
+ */
21
+ import type { Harness, HarnessSession, AgentConfig } from "./types.js";
22
+ import type { ToolDefinition } from "./tool-server.js";
23
+ /**
24
+ * Chibi Harness
25
+ *
26
+ * Creates sessions that delegate to chibi-json subprocess invocations.
27
+ * Each command is a separate process; context names provide multi-turn continuity.
28
+ */
29
+ export declare class ChibiHarness implements Harness {
30
+ readonly displayName = "chibi";
31
+ run(config: AgentConfig, prompt: string): HarnessSession;
32
+ createToolServer(name: string, tools: ToolDefinition[]): {
33
+ server: unknown;
34
+ };
35
+ }
36
+ //# sourceMappingURL=chibi-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chibi-harness.d.ts","sourceRoot":"","sources":["../../src/harness/chibi-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAA6B,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AA+YvD;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,OAAO;IAC1C,QAAQ,CAAC,WAAW,WAAW;IAE/B,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc;IAIxD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE;CAY7E"}
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Chibi Harness
3
+ *
4
+ * Adapts chibi-json into the universal Harness interface.
5
+ *
6
+ * chibi-json is stateless per invocation: each call reads ONE JSON object
7
+ * from stdin, executes the command, outputs JSONL to stdout, and exits.
8
+ * Multi-turn continuity comes from the named `context` — chibi persists
9
+ * conversation history on disk keyed by context name.
10
+ *
11
+ * Protocol (from `chibi-json --json-schema`):
12
+ * Input: { command: Command, context: string, project_root?: string, flags?: ExecutionFlags }
13
+ * Output: JSONL lines — transcript entries (entry_type: "message"|"tool_call"|"tool_result")
14
+ * and error objects (type: "error", message: string)
15
+ *
16
+ * Session lifecycle:
17
+ * 1. set_system_prompt (separate invocation, no output)
18
+ * 2. send_prompt (separate invocation, streams JSONL output)
19
+ * 3. For multi-turn: send_prompt again with same context name
20
+ */
21
+ import { execFileSync, spawn } from "node:child_process";
22
+ import * as crypto from "node:crypto";
23
+ import * as fs from "node:fs";
24
+ import * as os from "node:os";
25
+ import * as path from "node:path";
26
+ import * as readline from "node:readline";
27
+ import { fileURLToPath } from "node:url";
28
+ import { createEphemeralHome } from "./ephemeral-home.js";
29
+ import { wrapCommand, isSandboxEnabled } from "./sandbox.js";
30
+ const CHIBI_TOOL_MARKER = "__chibi_tools__";
31
+ /**
32
+ * Build the chibi-json input object for a command.
33
+ */
34
+ function buildInput(command, context, projectRoot, home) {
35
+ const input = { command, context };
36
+ if (projectRoot) {
37
+ input.project_root = projectRoot;
38
+ }
39
+ if (home) {
40
+ input.home = home;
41
+ }
42
+ return JSON.stringify(input);
43
+ }
44
+ /**
45
+ * Run a chibi-json command synchronously (for commands with no streaming output like set_system_prompt).
46
+ */
47
+ function runSync(inputJson, opts) {
48
+ const { command, args } = wrapCommand("chibi-json", [], opts?.sandboxConfig);
49
+ execFileSync(command, args, {
50
+ input: inputJson,
51
+ stdio: ["pipe", "pipe", "pipe"],
52
+ timeout: 10_000,
53
+ env: opts?.env ? { ...process.env, ...opts.env } : undefined,
54
+ });
55
+ }
56
+ /**
57
+ * Parse a chibi JSONL output line into AgentEvents.
58
+ *
59
+ * Chibi transcript entries have:
60
+ * - entry_type: "message" | "tool_call" | "tool_result"
61
+ * - from: sender name
62
+ * - to: context name
63
+ * - content: string (for messages) or structured data
64
+ *
65
+ * Error objects have:
66
+ * - type: "error"
67
+ * - message: string
68
+ */
69
+ function parseChibiLine(line) {
70
+ const events = [];
71
+ try {
72
+ const data = JSON.parse(line);
73
+ // Error object
74
+ if (data.type === "error") {
75
+ events.push({
76
+ type: "error",
77
+ message: data.message || "Unknown chibi error",
78
+ });
79
+ return events;
80
+ }
81
+ // Transcript entries (from chibi's conversation log)
82
+ if (data.entry_type === "message") {
83
+ // Skip user messages (from="user"), only emit assistant responses
84
+ if (data.from !== "user" && data.content) {
85
+ events.push({ type: "text", text: data.content });
86
+ }
87
+ }
88
+ else if (data.entry_type === "tool_call") {
89
+ let input = {};
90
+ try {
91
+ input = typeof data.content === "string" ? JSON.parse(data.content) : (data.content || {});
92
+ }
93
+ catch {
94
+ // content wasn't valid JSON — leave input empty
95
+ }
96
+ events.push({
97
+ type: "tool_use",
98
+ name: data.to || "unknown",
99
+ id: data.tool_call_id || data.id || "",
100
+ input,
101
+ });
102
+ }
103
+ else if (data.entry_type === "tool_result") {
104
+ events.push({
105
+ type: "tool_result",
106
+ toolUseId: data.tool_call_id || data.id || "",
107
+ content: typeof data.content === "string" ? data.content : JSON.stringify(data.content || ""),
108
+ isError: data.is_error === true,
109
+ });
110
+ }
111
+ }
112
+ catch {
113
+ // Not valid JSON — ignore
114
+ }
115
+ return events;
116
+ }
117
+ /**
118
+ * Chibi harness session.
119
+ *
120
+ * Each prompt is a separate chibi-json invocation. The named context
121
+ * provides conversation continuity across invocations.
122
+ */
123
+ class ChibiSession {
124
+ config;
125
+ contextName;
126
+ child = null;
127
+ closed = false;
128
+ registeredTools = new Map();
129
+ ephemeralHome = null;
130
+ sandboxConfig;
131
+ extraEnv = {};
132
+ sandboxDenials = [];
133
+ constructor(config, initialPrompt) {
134
+ this.config = { ...config };
135
+ this.contextName = `autonav-${crypto.randomUUID().slice(0, 8)}`;
136
+ // Create ephemeral home with all chibi plugins
137
+ this.ephemeralHome = createEphemeralHome({
138
+ harness: "chibi",
139
+ setup: (home) => {
140
+ // home_override IS the chibi_dir in AppState::load — files go at root level.
141
+ // Copy user config so chibi can authenticate with the LLM API.
142
+ const userConfig = path.join(os.homedir(), ".chibi", "config.toml");
143
+ if (fs.existsSync(userConfig)) {
144
+ fs.copyFileSync(userConfig, path.join(home, "config.toml"));
145
+ }
146
+ // Install all chibi plugins from the plugins directory
147
+ const pluginsDir = path.join(home, "plugins");
148
+ fs.mkdirSync(pluginsDir);
149
+ const srcDir = fileURLToPath(new URL("./chibi-plugins", import.meta.url));
150
+ if (fs.existsSync(srcDir)) {
151
+ for (const file of fs.readdirSync(srcDir)) {
152
+ const srcPath = path.join(srcDir, file);
153
+ if (fs.statSync(srcPath).isFile()) {
154
+ fs.copyFileSync(srcPath, path.join(pluginsDir, file));
155
+ fs.chmodSync(path.join(pluginsDir, file), 0o755);
156
+ }
157
+ }
158
+ }
159
+ },
160
+ });
161
+ // Build extra env vars for plugin scripts
162
+ if (config.cwd) {
163
+ // Resolve plugins.json path relative to navigator directory
164
+ const pluginsPath = path.join(config.cwd, ".claude", "plugins.json");
165
+ if (fs.existsSync(pluginsPath)) {
166
+ this.extraEnv.AUTONAV_PLUGINS_PATH = pluginsPath;
167
+ }
168
+ }
169
+ // Cycle detection depth for cross-nav queries
170
+ const currentDepth = process.env.AUTONAV_QUERY_DEPTH || "0";
171
+ this.extraEnv.AUTONAV_QUERY_DEPTH = currentDepth;
172
+ // Build sandbox config from AgentConfig.sandbox + defaults
173
+ if (config.sandbox) {
174
+ this.sandboxConfig = { ...config.sandbox };
175
+ // Chibi makes its own API calls — never block network
176
+ this.sandboxConfig.blockNetwork = false;
177
+ // Merge paths: navigator dir (at least read), ephemeral home (always write)
178
+ const writeSet = new Set(this.sandboxConfig.writePaths || []);
179
+ if (this.ephemeralHome)
180
+ writeSet.add(this.ephemeralHome.homePath);
181
+ this.sandboxConfig.writePaths = [...writeSet];
182
+ // Only add cwd to readPaths if it's not already in writePaths (write implies read)
183
+ const readSet = new Set(this.sandboxConfig.readPaths || []);
184
+ if (config.cwd && !writeSet.has(config.cwd))
185
+ readSet.add(config.cwd);
186
+ this.sandboxConfig.readPaths = [...readSet];
187
+ // Debug: log sandbox status
188
+ if (process.env.AUTONAV_DEBUG === "1" && config.stderr) {
189
+ const active = isSandboxEnabled(this.sandboxConfig);
190
+ config.stderr(`[chibi] Sandbox: ${active ? "enabled (nono)" : "disabled"}\n`);
191
+ if (active) {
192
+ const { command, args } = wrapCommand("chibi-json", [], this.sandboxConfig);
193
+ config.stderr(`[chibi] Sandbox cmd: ${command} ${args.join(" ")}\n`);
194
+ }
195
+ }
196
+ }
197
+ // Extract chibi tool servers from mcpServers config
198
+ if (config.mcpServers) {
199
+ for (const serverObj of Object.values(config.mcpServers)) {
200
+ if (serverObj &&
201
+ typeof serverObj === "object" &&
202
+ CHIBI_TOOL_MARKER in serverObj) {
203
+ const chibiServer = serverObj;
204
+ for (const td of chibiServer.tools) {
205
+ this.registeredTools.set(td.name, td);
206
+ }
207
+ }
208
+ }
209
+ }
210
+ // Set system prompt (separate synchronous invocation)
211
+ if (config.systemPrompt) {
212
+ const input = buildInput({ set_system_prompt: { prompt: config.systemPrompt } }, this.contextName, config.cwd, this.ephemeralHome.homePath);
213
+ try {
214
+ runSync(input, { env: this.extraEnv, sandboxConfig: this.sandboxConfig });
215
+ }
216
+ catch (error) {
217
+ // Log but don't fail — system prompt is best-effort
218
+ const msg = error instanceof Error ? error.message : String(error);
219
+ if (config.stderr) {
220
+ config.stderr(`[chibi] Failed to set system prompt: ${msg}`);
221
+ }
222
+ }
223
+ }
224
+ // Start the prompt invocation
225
+ this.child = this.spawnPrompt(initialPrompt);
226
+ }
227
+ /**
228
+ * Spawn a chibi-json process for a send_prompt command.
229
+ * Returns the child process whose stdout streams JSONL events.
230
+ */
231
+ spawnPrompt(prompt) {
232
+ const inputJson = buildInput({ send_prompt: { prompt } }, this.contextName, this.config.cwd, this.ephemeralHome?.homePath);
233
+ const { command, args } = wrapCommand("chibi-json", [], this.sandboxConfig);
234
+ const child = spawn(command, args, {
235
+ stdio: ["pipe", "pipe", "pipe"],
236
+ env: { ...process.env, ...this.extraEnv },
237
+ });
238
+ // Write the single JSON input and close stdin
239
+ child.stdin?.write(inputJson);
240
+ child.stdin?.end();
241
+ // Handle stderr — always capture sandbox denials, forward rest to debug handler
242
+ if (child.stderr) {
243
+ const stderrHandler = this.config.stderr;
244
+ const sandboxActive = isSandboxEnabled(this.sandboxConfig);
245
+ child.stderr.on("data", (data) => {
246
+ const text = data.toString();
247
+ if (stderrHandler) {
248
+ stderrHandler(text);
249
+ }
250
+ // Surface sandbox denials as events even outside debug mode
251
+ if (sandboxActive && text.includes("nono:")) {
252
+ this.sandboxDenials.push(text.trim());
253
+ }
254
+ });
255
+ }
256
+ return child;
257
+ }
258
+ async *[Symbol.asyncIterator]() {
259
+ if (!this.child || !this.child.stdout) {
260
+ throw new Error("Chibi process not started");
261
+ }
262
+ const rl = readline.createInterface({
263
+ input: this.child.stdout,
264
+ crlfDelay: Infinity,
265
+ });
266
+ let hasResult = false;
267
+ let lastText = "";
268
+ let hadError = false;
269
+ for await (const line of rl) {
270
+ if (!line.trim())
271
+ continue;
272
+ const events = parseChibiLine(line);
273
+ for (const event of events) {
274
+ if (event.type === "error") {
275
+ hadError = true;
276
+ }
277
+ if (event.type === "text") {
278
+ lastText = event.text;
279
+ }
280
+ // Intercept tool_use events for registered tools
281
+ // Note: chibi handles its own tool calls natively, but autonav-registered
282
+ // tools (submit_answer, self-config) need local interception.
283
+ // This won't work with stateless chibi-json — tool interception requires
284
+ // a long-running process. For now, yield the event and let the caller handle it.
285
+ yield event;
286
+ }
287
+ }
288
+ // Surface sandbox denials so callers see what nono blocked
289
+ // These are informational — the process exit code determines success/failure
290
+ for (const denial of this.sandboxDenials) {
291
+ yield { type: "error", message: `[sandbox] ${denial}` };
292
+ }
293
+ this.sandboxDenials = [];
294
+ // Emit a synthetic result event based on process exit
295
+ if (!hasResult) {
296
+ const exitCode = await new Promise((resolve) => {
297
+ if (!this.child) {
298
+ resolve(null);
299
+ return;
300
+ }
301
+ if (this.child.exitCode !== null) {
302
+ resolve(this.child.exitCode);
303
+ return;
304
+ }
305
+ this.child.on("exit", (code) => resolve(code));
306
+ });
307
+ yield {
308
+ type: "result",
309
+ success: exitCode === 0 && !hadError,
310
+ text: lastText || (hadError ? "chibi-json returned an error" : ""),
311
+ };
312
+ }
313
+ }
314
+ send(prompt) {
315
+ if (this.closed) {
316
+ throw new Error("Session is closed");
317
+ }
318
+ // New invocation, same context name = multi-turn continuity
319
+ this.child = this.spawnPrompt(prompt);
320
+ const session = this;
321
+ return {
322
+ [Symbol.asyncIterator]() {
323
+ return session[Symbol.asyncIterator]();
324
+ },
325
+ };
326
+ }
327
+ updateConfig(config) {
328
+ Object.assign(this.config, config);
329
+ }
330
+ async close() {
331
+ this.closed = true;
332
+ if (this.child && this.child.exitCode === null) {
333
+ this.child.kill("SIGTERM");
334
+ await new Promise((resolve) => {
335
+ if (!this.child) {
336
+ resolve();
337
+ return;
338
+ }
339
+ this.child.on("exit", () => resolve());
340
+ setTimeout(() => {
341
+ this.child?.kill("SIGKILL");
342
+ resolve();
343
+ }, 5000);
344
+ });
345
+ }
346
+ // Clean up the context
347
+ try {
348
+ const destroyInput = buildInput({ destroy_context: { name: this.contextName } }, this.contextName, undefined, this.ephemeralHome?.homePath);
349
+ runSync(destroyInput, { env: this.extraEnv, sandboxConfig: this.sandboxConfig });
350
+ }
351
+ catch {
352
+ // Best-effort cleanup
353
+ }
354
+ // Clean up ephemeral home directory
355
+ this.ephemeralHome?.cleanup();
356
+ this.ephemeralHome = null;
357
+ }
358
+ }
359
+ /**
360
+ * Chibi Harness
361
+ *
362
+ * Creates sessions that delegate to chibi-json subprocess invocations.
363
+ * Each command is a separate process; context names provide multi-turn continuity.
364
+ */
365
+ export class ChibiHarness {
366
+ displayName = "chibi";
367
+ run(config, prompt) {
368
+ return new ChibiSession(config, prompt);
369
+ }
370
+ createToolServer(name, tools) {
371
+ // Return a sentinel object that ChibiSession can detect and extract tools from.
372
+ // Note: Tool interception doesn't work with stateless chibi-json invocations.
373
+ // Tools registered here are yielded as events for the caller to handle.
374
+ return {
375
+ server: {
376
+ [CHIBI_TOOL_MARKER]: true,
377
+ name,
378
+ tools,
379
+ },
380
+ };
381
+ }
382
+ }
383
+ //# sourceMappingURL=chibi-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chibi-harness.js","sourceRoot":"","sources":["../../src/harness/chibi-harness.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ #!/bin/bash
2
+ # get_plugin_config chibi plugin
3
+ #
4
+ # Reads $AUTONAV_PLUGINS_PATH and returns plugin configuration.
5
+
6
+ set -euo pipefail
7
+
8
+ if [[ "${1:-}" == "--schema" ]]; then
9
+ printf '%s\n' '{' \
10
+ ' "name": "get_plugin_config",' \
11
+ ' "description": "Read your current plugin configuration. Use this to check what plugins are enabled, see notification settings, or verify your current schedule.",' \
12
+ ' "parameters": {' \
13
+ ' "type": "object",' \
14
+ ' "properties": {' \
15
+ ' "plugin": {' \
16
+ ' "type": "string",' \
17
+ ' "enum": ["slack", "signal", "github", "email", "all"],' \
18
+ ' "description": "The plugin to read configuration for, or '\''all'\'' for everything"' \
19
+ ' }' \
20
+ ' },' \
21
+ ' "required": ["plugin"]' \
22
+ ' }' \
23
+ '}'
24
+ exit 0
25
+ fi
26
+
27
+ # Read JSON args from stdin
28
+ input=$(cat)
29
+ plugin=$(echo "$input" | jq -r '.plugin // empty')
30
+
31
+ if [[ -z "$plugin" ]]; then
32
+ echo '{"success": false, "error": "Missing required field: plugin"}'
33
+ exit 0
34
+ fi
35
+
36
+ # Check env var
37
+ config_path="${AUTONAV_PLUGINS_PATH:-}"
38
+ if [[ -z "$config_path" ]]; then
39
+ echo '{"success": false, "error": "AUTONAV_PLUGINS_PATH not set. Plugin configuration unavailable."}'
40
+ exit 0
41
+ fi
42
+
43
+ if [[ ! -f "$config_path" ]]; then
44
+ echo '{"success": false, "error": "Plugin configuration file not found."}'
45
+ exit 0
46
+ fi
47
+
48
+ # Read and return config
49
+ config=$(cat "$config_path")
50
+
51
+ if [[ "$plugin" == "all" ]]; then
52
+ jq -n --argjson config "$config" \
53
+ '{"success": true, "plugin": "all", "config": $config}'
54
+ else
55
+ # Extract specific plugin section
56
+ section=$(echo "$config" | jq --arg p "$plugin" '.[$p] // null')
57
+ if [[ "$section" == "null" ]]; then
58
+ jq -n --arg p "$plugin" \
59
+ '{"success": true, "plugin": $p, "config": {"enabled": false, "config": {}}}'
60
+ else
61
+ jq -n --arg p "$plugin" --argjson section "$section" \
62
+ '{"success": true, "plugin": $p, "config": $section}'
63
+ fi
64
+ fi