narai-primitives 2.0.0-rc.1

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 (440) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +64 -0
  3. package/dist/config/bootstrap.d.ts +28 -0
  4. package/dist/config/bootstrap.d.ts.map +1 -0
  5. package/dist/config/bootstrap.js +80 -0
  6. package/dist/config/bootstrap.js.map +1 -0
  7. package/dist/config/index.d.ts +13 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +12 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/load.d.ts +37 -0
  12. package/dist/config/load.d.ts.map +1 -0
  13. package/dist/config/load.js +99 -0
  14. package/dist/config/load.js.map +1 -0
  15. package/dist/config/resolve.d.ts +23 -0
  16. package/dist/config/resolve.d.ts.map +1 -0
  17. package/dist/config/resolve.js +198 -0
  18. package/dist/config/resolve.js.map +1 -0
  19. package/dist/config/secrets.d.ts +20 -0
  20. package/dist/config/secrets.d.ts.map +1 -0
  21. package/dist/config/secrets.js +43 -0
  22. package/dist/config/secrets.js.map +1 -0
  23. package/dist/config/types.d.ts +104 -0
  24. package/dist/config/types.d.ts.map +1 -0
  25. package/dist/config/types.js +11 -0
  26. package/dist/config/types.js.map +1 -0
  27. package/dist/connectors/aws/cli.d.ts +3 -0
  28. package/dist/connectors/aws/cli.d.ts.map +1 -0
  29. package/dist/connectors/aws/cli.js +27 -0
  30. package/dist/connectors/aws/cli.js.map +1 -0
  31. package/dist/connectors/aws/index.d.ts +27 -0
  32. package/dist/connectors/aws/index.d.ts.map +1 -0
  33. package/dist/connectors/aws/index.js +281 -0
  34. package/dist/connectors/aws/index.js.map +1 -0
  35. package/dist/connectors/aws/lib/aws_client.d.ts +140 -0
  36. package/dist/connectors/aws/lib/aws_client.d.ts.map +1 -0
  37. package/dist/connectors/aws/lib/aws_client.js +196 -0
  38. package/dist/connectors/aws/lib/aws_client.js.map +1 -0
  39. package/dist/connectors/aws/lib/aws_error.d.ts +10 -0
  40. package/dist/connectors/aws/lib/aws_error.d.ts.map +1 -0
  41. package/dist/connectors/aws/lib/aws_error.js +15 -0
  42. package/dist/connectors/aws/lib/aws_error.js.map +1 -0
  43. package/dist/connectors/confluence/cli.d.ts +3 -0
  44. package/dist/connectors/confluence/cli.d.ts.map +1 -0
  45. package/dist/connectors/confluence/cli.js +24 -0
  46. package/dist/connectors/confluence/cli.js.map +1 -0
  47. package/dist/connectors/confluence/index.d.ts +15 -0
  48. package/dist/connectors/confluence/index.d.ts.map +1 -0
  49. package/dist/connectors/confluence/index.js +295 -0
  50. package/dist/connectors/confluence/index.js.map +1 -0
  51. package/dist/connectors/confluence/lib/confluence_client.d.ts +135 -0
  52. package/dist/connectors/confluence/lib/confluence_client.d.ts.map +1 -0
  53. package/dist/connectors/confluence/lib/confluence_client.js +329 -0
  54. package/dist/connectors/confluence/lib/confluence_client.js.map +1 -0
  55. package/dist/connectors/confluence/lib/confluence_error.d.ts +13 -0
  56. package/dist/connectors/confluence/lib/confluence_error.d.ts.map +1 -0
  57. package/dist/connectors/confluence/lib/confluence_error.js +19 -0
  58. package/dist/connectors/confluence/lib/confluence_error.js.map +1 -0
  59. package/dist/connectors/db/cli.d.ts +5 -0
  60. package/dist/connectors/db/cli.d.ts.map +1 -0
  61. package/dist/connectors/db/cli.js +34 -0
  62. package/dist/connectors/db/cli.js.map +1 -0
  63. package/dist/connectors/db/config.d.ts +18 -0
  64. package/dist/connectors/db/config.d.ts.map +1 -0
  65. package/dist/connectors/db/config.js +142 -0
  66. package/dist/connectors/db/config.js.map +1 -0
  67. package/dist/connectors/db/connector.d.ts +31 -0
  68. package/dist/connectors/db/connector.d.ts.map +1 -0
  69. package/dist/connectors/db/connector.js +175 -0
  70. package/dist/connectors/db/connector.js.map +1 -0
  71. package/dist/connectors/db/dispatcher.d.ts +36 -0
  72. package/dist/connectors/db/dispatcher.d.ts.map +1 -0
  73. package/dist/connectors/db/dispatcher.js +597 -0
  74. package/dist/connectors/db/dispatcher.js.map +1 -0
  75. package/dist/connectors/db/index.d.ts +22 -0
  76. package/dist/connectors/db/index.d.ts.map +1 -0
  77. package/dist/connectors/db/index.js +26 -0
  78. package/dist/connectors/db/index.js.map +1 -0
  79. package/dist/connectors/db/lib/audit.d.ts +32 -0
  80. package/dist/connectors/db/lib/audit.d.ts.map +1 -0
  81. package/dist/connectors/db/lib/audit.js +130 -0
  82. package/dist/connectors/db/lib/audit.js.map +1 -0
  83. package/dist/connectors/db/lib/connection.d.ts +61 -0
  84. package/dist/connectors/db/lib/connection.d.ts.map +1 -0
  85. package/dist/connectors/db/lib/connection.js +326 -0
  86. package/dist/connectors/db/lib/connection.js.map +1 -0
  87. package/dist/connectors/db/lib/credentials.d.ts +60 -0
  88. package/dist/connectors/db/lib/credentials.d.ts.map +1 -0
  89. package/dist/connectors/db/lib/credentials.js +117 -0
  90. package/dist/connectors/db/lib/credentials.js.map +1 -0
  91. package/dist/connectors/db/lib/drivers/base.d.ts +83 -0
  92. package/dist/connectors/db/lib/drivers/base.d.ts.map +1 -0
  93. package/dist/connectors/db/lib/drivers/base.js +46 -0
  94. package/dist/connectors/db/lib/drivers/base.js.map +1 -0
  95. package/dist/connectors/db/lib/drivers/dynamodb.d.ts +108 -0
  96. package/dist/connectors/db/lib/drivers/dynamodb.d.ts.map +1 -0
  97. package/dist/connectors/db/lib/drivers/dynamodb.js +468 -0
  98. package/dist/connectors/db/lib/drivers/dynamodb.js.map +1 -0
  99. package/dist/connectors/db/lib/drivers/mongodb.d.ts +60 -0
  100. package/dist/connectors/db/lib/drivers/mongodb.d.ts.map +1 -0
  101. package/dist/connectors/db/lib/drivers/mongodb.js +371 -0
  102. package/dist/connectors/db/lib/drivers/mongodb.js.map +1 -0
  103. package/dist/connectors/db/lib/drivers/mysql.d.ts +45 -0
  104. package/dist/connectors/db/lib/drivers/mysql.d.ts.map +1 -0
  105. package/dist/connectors/db/lib/drivers/mysql.js +265 -0
  106. package/dist/connectors/db/lib/drivers/mysql.js.map +1 -0
  107. package/dist/connectors/db/lib/drivers/oracle.d.ts +53 -0
  108. package/dist/connectors/db/lib/drivers/oracle.d.ts.map +1 -0
  109. package/dist/connectors/db/lib/drivers/oracle.js +350 -0
  110. package/dist/connectors/db/lib/drivers/oracle.js.map +1 -0
  111. package/dist/connectors/db/lib/drivers/postgresql.d.ts +65 -0
  112. package/dist/connectors/db/lib/drivers/postgresql.d.ts.map +1 -0
  113. package/dist/connectors/db/lib/drivers/postgresql.js +294 -0
  114. package/dist/connectors/db/lib/drivers/postgresql.js.map +1 -0
  115. package/dist/connectors/db/lib/drivers/register.d.ts +16 -0
  116. package/dist/connectors/db/lib/drivers/register.d.ts.map +1 -0
  117. package/dist/connectors/db/lib/drivers/register.js +111 -0
  118. package/dist/connectors/db/lib/drivers/register.js.map +1 -0
  119. package/dist/connectors/db/lib/drivers/sqlite.d.ts +11 -0
  120. package/dist/connectors/db/lib/drivers/sqlite.d.ts.map +1 -0
  121. package/dist/connectors/db/lib/drivers/sqlite.js +147 -0
  122. package/dist/connectors/db/lib/drivers/sqlite.js.map +1 -0
  123. package/dist/connectors/db/lib/drivers/sqlserver.d.ts +58 -0
  124. package/dist/connectors/db/lib/drivers/sqlserver.d.ts.map +1 -0
  125. package/dist/connectors/db/lib/drivers/sqlserver.js +274 -0
  126. package/dist/connectors/db/lib/drivers/sqlserver.js.map +1 -0
  127. package/dist/connectors/db/lib/environments.d.ts +68 -0
  128. package/dist/connectors/db/lib/environments.d.ts.map +1 -0
  129. package/dist/connectors/db/lib/environments.js +53 -0
  130. package/dist/connectors/db/lib/environments.js.map +1 -0
  131. package/dist/connectors/db/lib/index.d.ts +28 -0
  132. package/dist/connectors/db/lib/index.d.ts.map +1 -0
  133. package/dist/connectors/db/lib/index.js +30 -0
  134. package/dist/connectors/db/lib/index.js.map +1 -0
  135. package/dist/connectors/db/lib/plugin_config.d.ts +64 -0
  136. package/dist/connectors/db/lib/plugin_config.d.ts.map +1 -0
  137. package/dist/connectors/db/lib/plugin_config.js +287 -0
  138. package/dist/connectors/db/lib/plugin_config.js.map +1 -0
  139. package/dist/connectors/db/lib/policy.d.ts +162 -0
  140. package/dist/connectors/db/lib/policy.d.ts.map +1 -0
  141. package/dist/connectors/db/lib/policy.js +581 -0
  142. package/dist/connectors/db/lib/policy.js.map +1 -0
  143. package/dist/connectors/db/lib/query.d.ts +22 -0
  144. package/dist/connectors/db/lib/query.d.ts.map +1 -0
  145. package/dist/connectors/db/lib/query.js +93 -0
  146. package/dist/connectors/db/lib/query.js.map +1 -0
  147. package/dist/connectors/db/lib/schema.d.ts +13 -0
  148. package/dist/connectors/db/lib/schema.d.ts.map +1 -0
  149. package/dist/connectors/db/lib/schema.js +80 -0
  150. package/dist/connectors/db/lib/schema.js.map +1 -0
  151. package/dist/connectors/gcp/cli.d.ts +3 -0
  152. package/dist/connectors/gcp/cli.d.ts.map +1 -0
  153. package/dist/connectors/gcp/cli.js +24 -0
  154. package/dist/connectors/gcp/cli.js.map +1 -0
  155. package/dist/connectors/gcp/index.d.ts +24 -0
  156. package/dist/connectors/gcp/index.d.ts.map +1 -0
  157. package/dist/connectors/gcp/index.js +205 -0
  158. package/dist/connectors/gcp/index.js.map +1 -0
  159. package/dist/connectors/gcp/lib/gcp_client.d.ts +88 -0
  160. package/dist/connectors/gcp/lib/gcp_client.d.ts.map +1 -0
  161. package/dist/connectors/gcp/lib/gcp_client.js +434 -0
  162. package/dist/connectors/gcp/lib/gcp_client.js.map +1 -0
  163. package/dist/connectors/gcp/lib/gcp_error.d.ts +10 -0
  164. package/dist/connectors/gcp/lib/gcp_error.d.ts.map +1 -0
  165. package/dist/connectors/gcp/lib/gcp_error.js +15 -0
  166. package/dist/connectors/gcp/lib/gcp_error.js.map +1 -0
  167. package/dist/connectors/github/cli.d.ts +3 -0
  168. package/dist/connectors/github/cli.d.ts.map +1 -0
  169. package/dist/connectors/github/cli.js +23 -0
  170. package/dist/connectors/github/cli.js.map +1 -0
  171. package/dist/connectors/github/index.d.ts +23 -0
  172. package/dist/connectors/github/index.d.ts.map +1 -0
  173. package/dist/connectors/github/index.js +462 -0
  174. package/dist/connectors/github/index.js.map +1 -0
  175. package/dist/connectors/github/lib/github_client.d.ts +181 -0
  176. package/dist/connectors/github/lib/github_client.d.ts.map +1 -0
  177. package/dist/connectors/github/lib/github_client.js +383 -0
  178. package/dist/connectors/github/lib/github_client.js.map +1 -0
  179. package/dist/connectors/github/lib/github_error.d.ts +11 -0
  180. package/dist/connectors/github/lib/github_error.d.ts.map +1 -0
  181. package/dist/connectors/github/lib/github_error.js +17 -0
  182. package/dist/connectors/github/lib/github_error.js.map +1 -0
  183. package/dist/connectors/jira/cli.d.ts +3 -0
  184. package/dist/connectors/jira/cli.d.ts.map +1 -0
  185. package/dist/connectors/jira/cli.js +24 -0
  186. package/dist/connectors/jira/cli.js.map +1 -0
  187. package/dist/connectors/jira/index.d.ts +13 -0
  188. package/dist/connectors/jira/index.d.ts.map +1 -0
  189. package/dist/connectors/jira/index.js +287 -0
  190. package/dist/connectors/jira/index.js.map +1 -0
  191. package/dist/connectors/jira/lib/adf.d.ts +25 -0
  192. package/dist/connectors/jira/lib/adf.d.ts.map +1 -0
  193. package/dist/connectors/jira/lib/adf.js +105 -0
  194. package/dist/connectors/jira/lib/adf.js.map +1 -0
  195. package/dist/connectors/jira/lib/jira_client.d.ts +143 -0
  196. package/dist/connectors/jira/lib/jira_client.d.ts.map +1 -0
  197. package/dist/connectors/jira/lib/jira_client.js +355 -0
  198. package/dist/connectors/jira/lib/jira_client.js.map +1 -0
  199. package/dist/connectors/jira/lib/jira_error.d.ts +11 -0
  200. package/dist/connectors/jira/lib/jira_error.d.ts.map +1 -0
  201. package/dist/connectors/jira/lib/jira_error.js +17 -0
  202. package/dist/connectors/jira/lib/jira_error.js.map +1 -0
  203. package/dist/connectors/notion/cli.d.ts +3 -0
  204. package/dist/connectors/notion/cli.d.ts.map +1 -0
  205. package/dist/connectors/notion/cli.js +22 -0
  206. package/dist/connectors/notion/cli.js.map +1 -0
  207. package/dist/connectors/notion/index.d.ts +20 -0
  208. package/dist/connectors/notion/index.d.ts.map +1 -0
  209. package/dist/connectors/notion/index.js +317 -0
  210. package/dist/connectors/notion/index.js.map +1 -0
  211. package/dist/connectors/notion/lib/notion_client.d.ts +117 -0
  212. package/dist/connectors/notion/lib/notion_client.d.ts.map +1 -0
  213. package/dist/connectors/notion/lib/notion_client.js +377 -0
  214. package/dist/connectors/notion/lib/notion_client.js.map +1 -0
  215. package/dist/connectors/notion/lib/notion_error.d.ts +12 -0
  216. package/dist/connectors/notion/lib/notion_error.d.ts.map +1 -0
  217. package/dist/connectors/notion/lib/notion_error.js +18 -0
  218. package/dist/connectors/notion/lib/notion_error.js.map +1 -0
  219. package/dist/hub/cli.d.ts +4 -0
  220. package/dist/hub/cli.d.ts.map +1 -0
  221. package/dist/hub/cli.js +93 -0
  222. package/dist/hub/cli.js.map +1 -0
  223. package/dist/hub/dispatch.d.ts +33 -0
  224. package/dist/hub/dispatch.d.ts.map +1 -0
  225. package/dist/hub/dispatch.js +297 -0
  226. package/dist/hub/dispatch.js.map +1 -0
  227. package/dist/hub/index.d.ts +9 -0
  228. package/dist/hub/index.d.ts.map +1 -0
  229. package/dist/hub/index.js +215 -0
  230. package/dist/hub/index.js.map +1 -0
  231. package/dist/hub/plan.d.ts +24 -0
  232. package/dist/hub/plan.d.ts.map +1 -0
  233. package/dist/hub/plan.js +103 -0
  234. package/dist/hub/plan.js.map +1 -0
  235. package/dist/hub/types.d.ts +65 -0
  236. package/dist/hub/types.d.ts.map +1 -0
  237. package/dist/hub/types.js +3 -0
  238. package/dist/hub/types.js.map +1 -0
  239. package/dist/toolkit/_optional.d.ts +14 -0
  240. package/dist/toolkit/_optional.d.ts.map +1 -0
  241. package/dist/toolkit/_optional.js +96 -0
  242. package/dist/toolkit/_optional.js.map +1 -0
  243. package/dist/toolkit/agent_cli.d.ts +33 -0
  244. package/dist/toolkit/agent_cli.d.ts.map +1 -0
  245. package/dist/toolkit/agent_cli.js +62 -0
  246. package/dist/toolkit/agent_cli.js.map +1 -0
  247. package/dist/toolkit/agent_resolver.d.ts +46 -0
  248. package/dist/toolkit/agent_resolver.d.ts.map +1 -0
  249. package/dist/toolkit/agent_resolver.js +78 -0
  250. package/dist/toolkit/agent_resolver.js.map +1 -0
  251. package/dist/toolkit/audit/events.d.ts +45 -0
  252. package/dist/toolkit/audit/events.d.ts.map +1 -0
  253. package/dist/toolkit/audit/events.js +8 -0
  254. package/dist/toolkit/audit/events.js.map +1 -0
  255. package/dist/toolkit/audit/writer.d.ts +16 -0
  256. package/dist/toolkit/audit/writer.d.ts.map +1 -0
  257. package/dist/toolkit/audit/writer.js +73 -0
  258. package/dist/toolkit/audit/writer.js.map +1 -0
  259. package/dist/toolkit/cli/usage-report.d.ts +3 -0
  260. package/dist/toolkit/cli/usage-report.d.ts.map +1 -0
  261. package/dist/toolkit/cli/usage-report.js +76 -0
  262. package/dist/toolkit/cli/usage-report.js.map +1 -0
  263. package/dist/toolkit/connector.d.ts +142 -0
  264. package/dist/toolkit/connector.d.ts.map +1 -0
  265. package/dist/toolkit/connector.js +593 -0
  266. package/dist/toolkit/connector.js.map +1 -0
  267. package/dist/toolkit/extract_binary.d.ts +45 -0
  268. package/dist/toolkit/extract_binary.d.ts.map +1 -0
  269. package/dist/toolkit/extract_binary.js +342 -0
  270. package/dist/toolkit/extract_binary.js.map +1 -0
  271. package/dist/toolkit/extract_multimodal.d.ts +22 -0
  272. package/dist/toolkit/extract_multimodal.d.ts.map +1 -0
  273. package/dist/toolkit/extract_multimodal.js +209 -0
  274. package/dist/toolkit/extract_multimodal.js.map +1 -0
  275. package/dist/toolkit/fetch_attachment.d.ts +21 -0
  276. package/dist/toolkit/fetch_attachment.d.ts.map +1 -0
  277. package/dist/toolkit/fetch_attachment.js +169 -0
  278. package/dist/toolkit/fetch_attachment.js.map +1 -0
  279. package/dist/toolkit/fetch_helper.d.ts +47 -0
  280. package/dist/toolkit/fetch_helper.d.ts.map +1 -0
  281. package/dist/toolkit/fetch_helper.js +124 -0
  282. package/dist/toolkit/fetch_helper.js.map +1 -0
  283. package/dist/toolkit/guardrail.d.ts +63 -0
  284. package/dist/toolkit/guardrail.d.ts.map +1 -0
  285. package/dist/toolkit/guardrail.js +166 -0
  286. package/dist/toolkit/guardrail.js.map +1 -0
  287. package/dist/toolkit/hardship/curate.d.ts +47 -0
  288. package/dist/toolkit/hardship/curate.d.ts.map +1 -0
  289. package/dist/toolkit/hardship/curate.js +113 -0
  290. package/dist/toolkit/hardship/curate.js.map +1 -0
  291. package/dist/toolkit/hardship/patterns.d.ts +32 -0
  292. package/dist/toolkit/hardship/patterns.d.ts.map +1 -0
  293. package/dist/toolkit/hardship/patterns.js +98 -0
  294. package/dist/toolkit/hardship/patterns.js.map +1 -0
  295. package/dist/toolkit/hardship/preamble.d.ts +13 -0
  296. package/dist/toolkit/hardship/preamble.d.ts.map +1 -0
  297. package/dist/toolkit/hardship/preamble.js +47 -0
  298. package/dist/toolkit/hardship/preamble.js.map +1 -0
  299. package/dist/toolkit/hardship/read.d.ts +34 -0
  300. package/dist/toolkit/hardship/read.d.ts.map +1 -0
  301. package/dist/toolkit/hardship/read.js +116 -0
  302. package/dist/toolkit/hardship/read.js.map +1 -0
  303. package/dist/toolkit/hardship/record.d.ts +43 -0
  304. package/dist/toolkit/hardship/record.d.ts.map +1 -0
  305. package/dist/toolkit/hardship/record.js +74 -0
  306. package/dist/toolkit/hardship/record.js.map +1 -0
  307. package/dist/toolkit/hardship/scope.d.ts +20 -0
  308. package/dist/toolkit/hardship/scope.d.ts.map +1 -0
  309. package/dist/toolkit/hardship/scope.js +56 -0
  310. package/dist/toolkit/hardship/scope.js.map +1 -0
  311. package/dist/toolkit/index.d.ts +42 -0
  312. package/dist/toolkit/index.d.ts.map +1 -0
  313. package/dist/toolkit/index.js +51 -0
  314. package/dist/toolkit/index.js.map +1 -0
  315. package/dist/toolkit/plugin/curate-cmd.d.ts +22 -0
  316. package/dist/toolkit/plugin/curate-cmd.d.ts.map +1 -0
  317. package/dist/toolkit/plugin/curate-cmd.js +72 -0
  318. package/dist/toolkit/plugin/curate-cmd.js.map +1 -0
  319. package/dist/toolkit/plugin/prefs.d.ts +15 -0
  320. package/dist/toolkit/plugin/prefs.d.ts.map +1 -0
  321. package/dist/toolkit/plugin/prefs.js +78 -0
  322. package/dist/toolkit/plugin/prefs.js.map +1 -0
  323. package/dist/toolkit/plugin/reminder.d.ts +28 -0
  324. package/dist/toolkit/plugin/reminder.d.ts.map +1 -0
  325. package/dist/toolkit/plugin/reminder.js +103 -0
  326. package/dist/toolkit/plugin/reminder.js.map +1 -0
  327. package/dist/toolkit/policy/approval.d.ts +24 -0
  328. package/dist/toolkit/policy/approval.d.ts.map +1 -0
  329. package/dist/toolkit/policy/approval.js +56 -0
  330. package/dist/toolkit/policy/approval.js.map +1 -0
  331. package/dist/toolkit/policy/config.d.ts +38 -0
  332. package/dist/toolkit/policy/config.d.ts.map +1 -0
  333. package/dist/toolkit/policy/config.js +172 -0
  334. package/dist/toolkit/policy/config.js.map +1 -0
  335. package/dist/toolkit/policy/gate.d.ts +28 -0
  336. package/dist/toolkit/policy/gate.d.ts.map +1 -0
  337. package/dist/toolkit/policy/gate.js +126 -0
  338. package/dist/toolkit/policy/gate.js.map +1 -0
  339. package/dist/toolkit/policy/types.d.ts +106 -0
  340. package/dist/toolkit/policy/types.d.ts.map +1 -0
  341. package/dist/toolkit/policy/types.js +22 -0
  342. package/dist/toolkit/policy/types.js.map +1 -0
  343. package/dist/toolkit/security_check.d.ts +15 -0
  344. package/dist/toolkit/security_check.d.ts.map +1 -0
  345. package/dist/toolkit/security_check.js +109 -0
  346. package/dist/toolkit/security_check.js.map +1 -0
  347. package/dist/toolkit/usage/aggregate-cross-session.d.ts +36 -0
  348. package/dist/toolkit/usage/aggregate-cross-session.d.ts.map +1 -0
  349. package/dist/toolkit/usage/aggregate-cross-session.js +142 -0
  350. package/dist/toolkit/usage/aggregate-cross-session.js.map +1 -0
  351. package/dist/toolkit/usage/aggregate.d.ts +4 -0
  352. package/dist/toolkit/usage/aggregate.d.ts.map +1 -0
  353. package/dist/toolkit/usage/aggregate.js +105 -0
  354. package/dist/toolkit/usage/aggregate.js.map +1 -0
  355. package/dist/toolkit/usage/index.d.ts +11 -0
  356. package/dist/toolkit/usage/index.d.ts.map +1 -0
  357. package/dist/toolkit/usage/index.js +7 -0
  358. package/dist/toolkit/usage/index.js.map +1 -0
  359. package/dist/toolkit/usage/parse.d.ts +5 -0
  360. package/dist/toolkit/usage/parse.d.ts.map +1 -0
  361. package/dist/toolkit/usage/parse.js +19 -0
  362. package/dist/toolkit/usage/parse.js.map +1 -0
  363. package/dist/toolkit/usage/record.d.ts +8 -0
  364. package/dist/toolkit/usage/record.d.ts.map +1 -0
  365. package/dist/toolkit/usage/record.js +18 -0
  366. package/dist/toolkit/usage/record.js.map +1 -0
  367. package/dist/toolkit/usage/retention.d.ts +6 -0
  368. package/dist/toolkit/usage/retention.d.ts.map +1 -0
  369. package/dist/toolkit/usage/retention.js +71 -0
  370. package/dist/toolkit/usage/retention.js.map +1 -0
  371. package/dist/toolkit/usage/tokenize.d.ts +11 -0
  372. package/dist/toolkit/usage/tokenize.d.ts.map +1 -0
  373. package/dist/toolkit/usage/tokenize.js +24 -0
  374. package/dist/toolkit/usage/tokenize.js.map +1 -0
  375. package/dist/toolkit/usage/types.d.ts +34 -0
  376. package/dist/toolkit/usage/types.d.ts.map +1 -0
  377. package/dist/toolkit/usage/types.js +2 -0
  378. package/dist/toolkit/usage/types.js.map +1 -0
  379. package/package.json +124 -0
  380. package/plugin-hooks/session-summary.mjs +138 -0
  381. package/plugin-hooks/stale-summarize.mjs +70 -0
  382. package/plugin-hooks/usage-record.mjs +112 -0
  383. package/plugins/aws-agent/.claude-plugin/plugin.json +6 -0
  384. package/plugins/aws-agent/README.md +46 -0
  385. package/plugins/aws-agent/bin/aws-agent +22 -0
  386. package/plugins/aws-agent/commands/aws-agent.md +6 -0
  387. package/plugins/aws-agent/hooks/hooks.json +49 -0
  388. package/plugins/aws-agent/hooks/reminder.mjs +16 -0
  389. package/plugins/aws-agent/package.json +9 -0
  390. package/plugins/aws-agent/skills/aws-agent/SKILL.md +70 -0
  391. package/plugins/confluence-agent/.claude-plugin/plugin.json +6 -0
  392. package/plugins/confluence-agent/README.md +15 -0
  393. package/plugins/confluence-agent/bin/confluence-agent +17 -0
  394. package/plugins/confluence-agent/commands/confluence-agent.md +6 -0
  395. package/plugins/confluence-agent/hooks/hooks.json +49 -0
  396. package/plugins/confluence-agent/hooks/reminder.mjs +25 -0
  397. package/plugins/confluence-agent/package.json +8 -0
  398. package/plugins/confluence-agent/skills/confluence-agent/SKILL.md +40 -0
  399. package/plugins/db-agent/.claude-plugin/plugin.json +20 -0
  400. package/plugins/db-agent/README.md +13 -0
  401. package/plugins/db-agent/bin/db-agent +17 -0
  402. package/plugins/db-agent/commands/db-agent.md +6 -0
  403. package/plugins/db-agent/hooks/db-guard.mjs +110 -0
  404. package/plugins/db-agent/hooks/guardrails.json +26 -0
  405. package/plugins/db-agent/hooks/hooks.json +61 -0
  406. package/plugins/db-agent/hooks/reminder.mjs +16 -0
  407. package/plugins/db-agent/package.json +8 -0
  408. package/plugins/db-agent/skills/db-agent/SKILL.md +50 -0
  409. package/plugins/gcp-agent/.claude-plugin/plugin.json +6 -0
  410. package/plugins/gcp-agent/README.md +31 -0
  411. package/plugins/gcp-agent/bin/gcp-agent +18 -0
  412. package/plugins/gcp-agent/commands/gcp-agent.md +6 -0
  413. package/plugins/gcp-agent/hooks/hooks.json +49 -0
  414. package/plugins/gcp-agent/hooks/reminder.mjs +16 -0
  415. package/plugins/gcp-agent/package.json +9 -0
  416. package/plugins/gcp-agent/skills/gcp-agent/SKILL.md +54 -0
  417. package/plugins/github-agent/.claude-plugin/plugin.json +6 -0
  418. package/plugins/github-agent/README.md +13 -0
  419. package/plugins/github-agent/bin/github-agent +17 -0
  420. package/plugins/github-agent/commands/github-agent.md +6 -0
  421. package/plugins/github-agent/hooks/hooks.json +49 -0
  422. package/plugins/github-agent/hooks/reminder.mjs +16 -0
  423. package/plugins/github-agent/package.json +8 -0
  424. package/plugins/github-agent/skills/github-agent/SKILL.md +41 -0
  425. package/plugins/jira-agent/.claude-plugin/plugin.json +6 -0
  426. package/plugins/jira-agent/README.md +15 -0
  427. package/plugins/jira-agent/bin/jira-agent +17 -0
  428. package/plugins/jira-agent/commands/jira-agent.md +6 -0
  429. package/plugins/jira-agent/hooks/hooks.json +49 -0
  430. package/plugins/jira-agent/hooks/reminder.mjs +16 -0
  431. package/plugins/jira-agent/package.json +8 -0
  432. package/plugins/jira-agent/skills/jira-agent/SKILL.md +37 -0
  433. package/plugins/notion-agent/.claude-plugin/plugin.json +6 -0
  434. package/plugins/notion-agent/README.md +23 -0
  435. package/plugins/notion-agent/bin/notion-agent +17 -0
  436. package/plugins/notion-agent/commands/notion-agent.md +6 -0
  437. package/plugins/notion-agent/hooks/hooks.json +49 -0
  438. package/plugins/notion-agent/hooks/reminder.mjs +17 -0
  439. package/plugins/notion-agent/package.json +8 -0
  440. package/plugins/notion-agent/skills/notion-agent/SKILL.md +48 -0
package/package.json ADDED
@@ -0,0 +1,124 @@
1
+ {
2
+ "name": "narai-primitives",
3
+ "version": "2.0.0-rc.1",
4
+ "description": "Read-only connectors + planning hub + connector framework, in one package. Bundles what was @narai/connector-toolkit, @narai/connector-config, @narai/connector-hub, and the seven @narai/<svc>-agent-connector packages.",
5
+ "type": "module",
6
+ "main": "./dist/hub/index.js",
7
+ "types": "./dist/hub/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/hub/index.d.ts",
11
+ "import": "./dist/hub/index.js"
12
+ },
13
+ "./hub": {
14
+ "types": "./dist/hub/index.d.ts",
15
+ "import": "./dist/hub/index.js"
16
+ },
17
+ "./toolkit": {
18
+ "types": "./dist/toolkit/index.d.ts",
19
+ "import": "./dist/toolkit/index.js"
20
+ },
21
+ "./config": {
22
+ "types": "./dist/config/index.d.ts",
23
+ "import": "./dist/config/index.js"
24
+ },
25
+ "./aws": {
26
+ "types": "./dist/connectors/aws/index.d.ts",
27
+ "import": "./dist/connectors/aws/index.js"
28
+ },
29
+ "./confluence": {
30
+ "types": "./dist/connectors/confluence/index.d.ts",
31
+ "import": "./dist/connectors/confluence/index.js"
32
+ },
33
+ "./db": {
34
+ "types": "./dist/connectors/db/index.d.ts",
35
+ "import": "./dist/connectors/db/index.js"
36
+ },
37
+ "./gcp": {
38
+ "types": "./dist/connectors/gcp/index.d.ts",
39
+ "import": "./dist/connectors/gcp/index.js"
40
+ },
41
+ "./github": {
42
+ "types": "./dist/connectors/github/index.d.ts",
43
+ "import": "./dist/connectors/github/index.js"
44
+ },
45
+ "./jira": {
46
+ "types": "./dist/connectors/jira/index.d.ts",
47
+ "import": "./dist/connectors/jira/index.js"
48
+ },
49
+ "./notion": {
50
+ "types": "./dist/connectors/notion/index.d.ts",
51
+ "import": "./dist/connectors/notion/index.js"
52
+ }
53
+ },
54
+ "bin": {
55
+ "narai": "./dist/cli/narai.js",
56
+ "aws-agent-connector": "./dist/connectors/aws/cli.js",
57
+ "confluence-agent-connector": "./dist/connectors/confluence/cli.js",
58
+ "db-agent-connector": "./dist/connectors/db/cli.js",
59
+ "gcp-agent-connector": "./dist/connectors/gcp/cli.js",
60
+ "github-agent-connector": "./dist/connectors/github/cli.js",
61
+ "jira-agent-connector": "./dist/connectors/jira/cli.js",
62
+ "notion-agent-connector": "./dist/connectors/notion/cli.js",
63
+ "usage-report": "./dist/toolkit/cli/usage-report.js"
64
+ },
65
+ "engines": {
66
+ "node": ">=20.0.0"
67
+ },
68
+ "files": [
69
+ "dist/",
70
+ "plugins/",
71
+ "plugin-hooks/",
72
+ "README.md",
73
+ "LICENSE"
74
+ ],
75
+ "repository": {
76
+ "type": "git",
77
+ "url": "git+https://github.com/narailabs/narai-primitives.git"
78
+ },
79
+ "bugs": {
80
+ "url": "https://github.com/narailabs/narai-primitives/issues"
81
+ },
82
+ "homepage": "https://github.com/narailabs/narai-primitives#readme",
83
+ "publishConfig": {
84
+ "access": "public"
85
+ },
86
+ "scripts": {
87
+ "build": "tsc",
88
+ "typecheck": "tsc --noEmit",
89
+ "test": "vitest run",
90
+ "test:watch": "vitest",
91
+ "coverage": "vitest run --coverage"
92
+ },
93
+ "dependencies": {
94
+ "@anthropic-ai/claude-agent-sdk": "^0.2.119",
95
+ "@narai/credential-providers": "^0.2.1",
96
+ "better-sqlite3": "^12.9.0",
97
+ "js-yaml": "^4.1.1",
98
+ "zod": "^3.23.0"
99
+ },
100
+ "optionalDependencies": {
101
+ "@aws-sdk/client-cloudwatch": "^3.1030.0",
102
+ "@aws-sdk/client-dynamodb": "^3.1030.0",
103
+ "@aws-sdk/client-lambda": "^3.1030.0",
104
+ "@aws-sdk/client-rds": "^3.1030.0",
105
+ "@aws-sdk/client-s3": "^3.1030.0",
106
+ "@aws-sdk/client-sts": "^3.1030.0",
107
+ "gpt-tokenizer": "^2.5.0",
108
+ "mongodb": "^7.1.1",
109
+ "mssql": "^12.2.1",
110
+ "mysql2": "^3.22.0",
111
+ "oracledb": "^6.10.0",
112
+ "pg": "^8.20.0"
113
+ },
114
+ "devDependencies": {
115
+ "@types/better-sqlite3": "^7.6.13",
116
+ "@types/js-yaml": "^4.0.9",
117
+ "@types/node": "^20.19.39",
118
+ "@types/pg": "^8.20.0",
119
+ "@vitest/coverage-v8": "^3.0.0",
120
+ "aws-sdk-client-mock": "^4.1.0",
121
+ "typescript": "^5.9.3",
122
+ "vitest": "^3.0.0"
123
+ }
124
+ }
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env node
2
+ // SessionEnd hook — summarize one session's usage.jsonl into a .json + .md pair.
3
+
4
+ import { readFileSync, writeFileSync, existsSync } from "node:fs";
5
+ import { join } from "node:path";
6
+
7
+ function aggregate(connector, sessionId, records) {
8
+ if (records.length === 0) {
9
+ return {
10
+ session_id: sessionId,
11
+ connector,
12
+ start: "",
13
+ end: "",
14
+ total_calls: 0,
15
+ total_response_bytes: 0,
16
+ total_estimated_tokens: 0,
17
+ error_rate: 0,
18
+ by_action: {},
19
+ top_responses: [],
20
+ };
21
+ }
22
+ const byAction = {};
23
+ let totalBytes = 0, totalTokens = 0, errors = 0;
24
+ let start = records[0].ts, end = records[0].ts;
25
+ for (const r of records) {
26
+ totalBytes += r.response_bytes;
27
+ totalTokens += r.estimated_tokens;
28
+ if (r.status !== "success") errors++;
29
+ if (r.ts < start) start = r.ts;
30
+ if (r.ts > end) end = r.ts;
31
+ const s = byAction[r.action] ||= {
32
+ calls: 0, response_bytes: 0, estimated_tokens: 0, ms_total: 0, ms_count: 0,
33
+ };
34
+ s.calls++;
35
+ s.response_bytes += r.response_bytes;
36
+ s.estimated_tokens += r.estimated_tokens;
37
+ if (typeof r.execution_time_ms === "number") { s.ms_total += r.execution_time_ms; s.ms_count++; }
38
+ }
39
+ const by_action = {};
40
+ for (const [k, s] of Object.entries(byAction)) {
41
+ by_action[k] = {
42
+ calls: s.calls,
43
+ response_bytes: s.response_bytes,
44
+ estimated_tokens: s.estimated_tokens,
45
+ avg_ms: s.ms_count > 0 ? Math.round(s.ms_total / s.ms_count) : 0,
46
+ };
47
+ }
48
+ const top_responses = [...records]
49
+ .sort((a, b) => b.response_bytes - a.response_bytes)
50
+ .slice(0, 3)
51
+ .map((r) => ({ action: r.action, response_bytes: r.response_bytes }));
52
+ return {
53
+ session_id: sessionId,
54
+ connector,
55
+ start, end,
56
+ total_calls: records.length,
57
+ total_response_bytes: totalBytes,
58
+ total_estimated_tokens: totalTokens,
59
+ error_rate: errors / records.length,
60
+ by_action,
61
+ top_responses,
62
+ };
63
+ }
64
+
65
+ function renderMd(s) {
66
+ if (s.total_calls === 0) {
67
+ return `# ${s.connector} usage — session ${s.session_id}\n\nNo calls recorded.\n`;
68
+ }
69
+ const successes = s.total_calls - Math.round(s.error_rate * s.total_calls);
70
+ const errors = s.total_calls - successes;
71
+ const rows = Object.entries(s.by_action)
72
+ .sort(([, a], [, b]) => b.response_bytes - a.response_bytes)
73
+ .map(([action, a]) =>
74
+ `| ${action} | ${a.calls} | ${a.response_bytes.toLocaleString()} | ${a.estimated_tokens.toLocaleString()} | ${a.avg_ms} |`,
75
+ ).join("\n");
76
+ const top = s.top_responses.map((t, i) =>
77
+ `${i + 1}. ${t.action} (${t.response_bytes.toLocaleString()} bytes)`).join("\n");
78
+ return [
79
+ `# ${s.connector} usage — session ${s.session_id}`, ``,
80
+ `- Window: ${s.start} → ${s.end}`,
81
+ `- Calls: ${s.total_calls} (${successes} success, ${errors} error — ${(s.error_rate * 100).toFixed(1)}%)`,
82
+ `- Response bytes: ${s.total_response_bytes.toLocaleString()} | Estimated tokens: ${s.total_estimated_tokens.toLocaleString()}`,
83
+ ``,
84
+ `## By action`, ``,
85
+ `| action | calls | bytes | est. tokens | avg ms |`,
86
+ `|---|---|---|---|---|`,
87
+ rows, ``,
88
+ `## Top responses`, ``,
89
+ top, ``,
90
+ ].join("\n");
91
+ }
92
+
93
+ export function summarizeSession(baseDir, connector, sessionId) {
94
+ const jsonl = join(baseDir, `${sessionId}.jsonl`);
95
+ const summaryJson = join(baseDir, `summary-${sessionId}.json`);
96
+ const summaryMd = join(baseDir, `summary-${sessionId}.md`);
97
+ if (!existsSync(jsonl)) return;
98
+ if (existsSync(summaryJson)) return;
99
+
100
+ let raw;
101
+ try { raw = readFileSync(jsonl, "utf-8"); } catch { return; }
102
+ const records = raw.split("\n").filter(Boolean).map((l) => {
103
+ try { return JSON.parse(l); } catch { return null; }
104
+ }).filter(Boolean);
105
+
106
+ const summary = aggregate(connector, sessionId, records);
107
+ try {
108
+ writeFileSync(summaryJson, JSON.stringify(summary, null, 2), "utf-8");
109
+ writeFileSync(summaryMd, renderMd(summary), "utf-8");
110
+ } catch {
111
+ // swallow
112
+ }
113
+ }
114
+
115
+ function main() {
116
+ const connector = process.env["USAGE_CONNECTOR_NAME"];
117
+ if (!connector) return;
118
+
119
+ let raw;
120
+ try { raw = readFileSync(0, "utf-8"); } catch { return; }
121
+ let sessionId = "unknown";
122
+ try {
123
+ const p = JSON.parse(raw || "{}");
124
+ if (typeof p.session_id === "string") sessionId = p.session_id;
125
+ } catch {}
126
+
127
+ const baseDir =
128
+ process.env["USAGE_STORAGE_DIR"] ||
129
+ join(process.cwd(), ".claude", "connectors", connector, "usage");
130
+
131
+ summarizeSession(baseDir, connector, sessionId);
132
+ }
133
+
134
+ // Only auto-run when executed directly (not when imported by stale-summarize.mjs).
135
+ if (import.meta.url === `file://${process.argv[1]}`) {
136
+ try { main(); } catch {}
137
+ process.exit(0);
138
+ }
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env node
2
+ // SessionStart hook — summarize any orphaned <sid>.jsonl whose mtime is older
3
+ // than USAGE_SUMMARY_STALE_HOURS and has no matching summary-<sid>.json.
4
+
5
+ import { readdirSync, statSync, readFileSync, writeFileSync, existsSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ // Reuse summarizeSession by re-importing — but importing a sibling .mjs means
8
+ // the same file must be runnable standalone AND exportable. Simpler: inline
9
+ // a tiny wrapper that delegates to session-summary.mjs via dynamic import.
10
+
11
+ async function main() {
12
+ const connector = process.env["USAGE_CONNECTOR_NAME"];
13
+ if (!connector) return;
14
+ const staleHours = Number(process.env["USAGE_SUMMARY_STALE_HOURS"] ?? "12");
15
+ if (!Number.isFinite(staleHours) || staleHours <= 0) return;
16
+
17
+ const baseDir =
18
+ process.env["USAGE_STORAGE_DIR"] ||
19
+ join(process.cwd(), ".claude", "connectors", connector, "usage");
20
+
21
+ let entries;
22
+ try { entries = readdirSync(baseDir); } catch { return; }
23
+
24
+ const cutoff = Date.now() - staleHours * 60 * 60 * 1000;
25
+
26
+ // Dynamic-import the sibling summarizer module.
27
+ let summarizeSession;
28
+ try {
29
+ const mod = await import(new URL("./session-summary.mjs", import.meta.url).href);
30
+ summarizeSession = mod.summarizeSession;
31
+ } catch {
32
+ return;
33
+ }
34
+ if (typeof summarizeSession !== "function") return;
35
+
36
+ for (const name of entries) {
37
+ if (!name.endsWith(".jsonl")) continue;
38
+ const sessionId = name.slice(0, -".jsonl".length);
39
+ const summaryPath = join(baseDir, `summary-${sessionId}.json`);
40
+ if (existsSync(summaryPath)) continue;
41
+ let st;
42
+ try { st = statSync(join(baseDir, name)); } catch { continue; }
43
+ if (st.mtimeMs > cutoff) continue;
44
+ try { summarizeSession(baseDir, connector, sessionId); } catch {}
45
+ }
46
+
47
+ // Retention pass — gzip old files, delete very-old gz files.
48
+ const gzipDays = Number(process.env["USAGE_RETENTION_GZIP_DAYS"] ?? "30");
49
+ const deleteDays = Number(process.env["USAGE_RETENTION_DELETE_DAYS"] ?? "180");
50
+ if ((Number.isFinite(gzipDays) && gzipDays > 0) || (Number.isFinite(deleteDays) && deleteDays > 0)) {
51
+ try {
52
+ const { runRetention } = await import(
53
+ new URL(
54
+ "../dist/usage/retention.js",
55
+ import.meta.url,
56
+ ).href,
57
+ );
58
+ if (typeof runRetention === "function") {
59
+ await runRetention(baseDir, {
60
+ gzipDays: Number.isFinite(gzipDays) ? gzipDays : 0,
61
+ deleteDays: Number.isFinite(deleteDays) ? deleteDays : 0,
62
+ });
63
+ }
64
+ } catch {
65
+ // swallow — retention is best-effort
66
+ }
67
+ }
68
+ }
69
+
70
+ main().catch(() => {}).finally(() => process.exit(0));
@@ -0,0 +1,112 @@
1
+ #!/usr/bin/env node
2
+ // Toolkit-shipped PostToolUse hook. Appends one JSONL line per Bash call
3
+ // that invoked this plugin's connector CLI. Fail-soft: errors exit 0.
4
+
5
+ import { readFileSync, appendFileSync, mkdirSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+
8
+ async function main() {
9
+ if (process.env["USAGE_TRACKING_ENABLED"] === "0") return;
10
+
11
+ const connector = process.env["USAGE_CONNECTOR_NAME"];
12
+ const hint = process.env["USAGE_BIN_HINT"];
13
+ if (!connector || !hint) return;
14
+
15
+ // Read hook payload from stdin (Claude Code sends JSON on stdin).
16
+ let raw;
17
+ try {
18
+ raw = readFileSync(0, "utf-8");
19
+ } catch {
20
+ return;
21
+ }
22
+ if (!raw) return;
23
+
24
+ let payload;
25
+ try {
26
+ payload = JSON.parse(raw);
27
+ } catch {
28
+ return;
29
+ }
30
+
31
+ if (payload.tool_name !== "Bash") return;
32
+
33
+ const command =
34
+ (payload.tool_input && typeof payload.tool_input.command === "string"
35
+ ? payload.tool_input.command
36
+ : "") || "";
37
+ if (!command.includes(hint)) return;
38
+
39
+ const stdout =
40
+ (payload.tool_response &&
41
+ typeof payload.tool_response.stdout === "string" &&
42
+ payload.tool_response.stdout) ||
43
+ "";
44
+ const response_bytes = Buffer.byteLength(stdout, "utf-8");
45
+ // Tokenizer: heuristic by default, gpt-4o when opted in. Never throws.
46
+ let estimated_tokens = Math.ceil(response_bytes / 4);
47
+ let token_method = "heuristic";
48
+ const tokenizer = process.env["USAGE_TOKENIZER"];
49
+ if (tokenizer && tokenizer !== "heuristic") {
50
+ try {
51
+ if (tokenizer === "gpt-4o") {
52
+ const mod = await import("gpt-tokenizer").catch(() => null);
53
+ if (mod && typeof mod.encode === "function") {
54
+ estimated_tokens = mod.encode(stdout).length;
55
+ token_method = "gpt-4o";
56
+ }
57
+ }
58
+ // Unknown methods fall through; heuristic already set.
59
+ } catch {
60
+ // fallback already in place
61
+ }
62
+ }
63
+
64
+ // Parse --action from command.
65
+ const actionMatch = command.match(/--action\s+([A-Za-z0-9_-]+)/);
66
+ const action = actionMatch ? actionMatch[1] : "unknown";
67
+
68
+ // Parse envelope status.
69
+ let status = "unparseable";
70
+ try {
71
+ const env = JSON.parse(stdout);
72
+ if (env && typeof env.status === "string") status = env.status;
73
+ } catch {
74
+ // status stays "unparseable"
75
+ }
76
+
77
+ const execution_time_ms =
78
+ typeof payload.execution_time_ms === "number"
79
+ ? payload.execution_time_ms
80
+ : undefined;
81
+
82
+ const record = {
83
+ ts: new Date().toISOString(),
84
+ session_id: String(payload.session_id ?? "unknown"),
85
+ connector,
86
+ action,
87
+ status,
88
+ response_bytes,
89
+ estimated_tokens,
90
+ token_method,
91
+ ...(execution_time_ms !== undefined ? { execution_time_ms } : {}),
92
+ };
93
+
94
+ const baseDir =
95
+ process.env["USAGE_STORAGE_DIR"] ||
96
+ join(process.cwd(), ".claude", "connectors", connector, "usage");
97
+ const file = join(baseDir, `${record.session_id}.jsonl`);
98
+
99
+ try {
100
+ mkdirSync(dirname(file), { recursive: true });
101
+ appendFileSync(file, JSON.stringify(record) + "\n", "utf-8");
102
+ } catch {
103
+ // swallow
104
+ }
105
+ }
106
+
107
+ try {
108
+ await main();
109
+ } catch {
110
+ // never propagate
111
+ }
112
+ process.exit(0);
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "aws-agent-plugin",
3
+ "version": "1.0.0",
4
+ "description": "Read-only AWS connector for Claude Code. Wraps @narai/aws-agent-connector. Lambda, RDS, S3, CloudWatch.",
5
+ "author": "narai"
6
+ }
@@ -0,0 +1,46 @@
1
+ # aws-agent-plugin
2
+
3
+ Claude Code plugin that wraps [`@narai/aws-agent-connector`](https://www.npmjs.com/package/@narai/aws-agent-connector) as a read-only AWS skill and slash command.
4
+
5
+ ## What it adds
6
+
7
+ - **Skill** `aws-agent` — invoked automatically when the model is asked about AWS Lambda, RDS, S3, or CloudWatch.
8
+ - **Slash command** `/aws-agent <action> <params-json>` — explicit invocation.
9
+ - **Binary** `aws-agent` — thin shell shim that exec's the installed connector CLI.
10
+
11
+ ## How install works
12
+
13
+ Claude Code plugins don't run `npm install`. On first `SessionStart` the
14
+ hook in `hooks/hooks.json`:
15
+
16
+ 1. compares the plugin's `package.json` with whatever is in
17
+ `${CLAUDE_PLUGIN_DATA}/`;
18
+ 2. if different or missing, copies the manifest and runs
19
+ `npm install --no-audit --no-fund` inside `${CLAUDE_PLUGIN_DATA}`;
20
+ 3. if the install fails, removes the stale copy so the hook re-runs
21
+ next session.
22
+
23
+ After a successful install,
24
+ `${CLAUDE_PLUGIN_DATA}/node_modules/@narai/aws-agent-connector/dist/cli.js`
25
+ exists and `bin/aws-agent` can exec it.
26
+
27
+ ## Usage
28
+
29
+ Inside Claude Code:
30
+
31
+ ```
32
+ /aws-agent list_functions {"region":"us-east-1","prefix":"acme-"}
33
+ ```
34
+
35
+ Or let the `aws-agent` skill be triggered automatically by asking about
36
+ AWS resources.
37
+
38
+ ## AWS credentials
39
+
40
+ The connector uses the default AWS credential chain — profiles, env
41
+ vars, instance roles, and so on. No credentials are stored by this
42
+ plugin.
43
+
44
+ ## License
45
+
46
+ MIT
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env bash
2
+ # aws-agent — thin shim over @narai/aws-agent-connector.
3
+ #
4
+ # The SessionStart hook in hooks/hooks.json installs the npm package into
5
+ # ${CLAUDE_PLUGIN_DATA}/node_modules on first session. This shim exec's
6
+ # that CLI.
7
+ set -euo pipefail
8
+
9
+ if [ -z "${CLAUDE_PLUGIN_DATA:-}" ]; then
10
+ echo "aws-agent: CLAUDE_PLUGIN_DATA is not set (run from inside Claude Code)" >&2
11
+ exit 2
12
+ fi
13
+
14
+ CLI="${CLAUDE_PLUGIN_DATA}/node_modules/@narai/aws-agent-connector/dist/cli.js"
15
+
16
+ if [ ! -f "$CLI" ]; then
17
+ echo "aws-agent: connector CLI not found at $CLI" >&2
18
+ echo "Restart your Claude Code session to re-run the SessionStart install hook." >&2
19
+ exit 2
20
+ fi
21
+
22
+ exec node "$CLI" "$@"
@@ -0,0 +1,6 @@
1
+ ---
2
+ description: Run a read-only AWS query via the aws-agent connector
3
+ argument-hint: "<action> <params-json>"
4
+ ---
5
+
6
+ Invoke the `aws-agent` skill with the user's $ARGUMENTS as the action name and params JSON. Return the connector's JSON envelope verbatim.
@@ -0,0 +1,49 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "hooks": [
6
+ {
7
+ "type": "command",
8
+ "command": "diff -q \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/package.json\" >/dev/null 2>&1 || (mkdir -p \"${CLAUDE_PLUGIN_DATA}\" && cp \"${CLAUDE_PLUGIN_ROOT}/package.json\" \"${CLAUDE_PLUGIN_DATA}/\" && cd \"${CLAUDE_PLUGIN_DATA}\" && npm install --no-audit --no-fund) || rm -f \"${CLAUDE_PLUGIN_DATA}/package.json\""
9
+ },
10
+ {
11
+ "type": "command",
12
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/plugin/hooks/reminder.mjs\" 2>/dev/null || true"
13
+ },
14
+ {
15
+ "type": "command",
16
+ "command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/stale-summarize.mjs\" 2>/dev/null || true",
17
+ "env": { "USAGE_CONNECTOR_NAME": "aws" }
18
+ }
19
+ ]
20
+ }
21
+ ],
22
+ "PostToolUse": [
23
+ {
24
+ "matcher": "Bash",
25
+ "hooks": [
26
+ {
27
+ "type": "command",
28
+ "command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/usage-record.mjs\" 2>/dev/null || true",
29
+ "env": {
30
+ "USAGE_CONNECTOR_NAME": "aws",
31
+ "USAGE_BIN_HINT": "@narai/aws-agent-connector"
32
+ }
33
+ }
34
+ ]
35
+ }
36
+ ],
37
+ "SessionEnd": [
38
+ {
39
+ "hooks": [
40
+ {
41
+ "type": "command",
42
+ "command": "node \"${CLAUDE_PLUGIN_DATA}/node_modules/@narai/connector-toolkit/plugin-hooks/session-summary.mjs\" 2>/dev/null || true",
43
+ "env": { "USAGE_CONNECTOR_NAME": "aws" }
44
+ }
45
+ ]
46
+ }
47
+ ]
48
+ }
49
+ }
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * SessionStart curation reminder for the AWS connector.
4
+ */
5
+ try {
6
+ const data = process.env.CLAUDE_PLUGIN_DATA;
7
+ if (!data) process.exit(0);
8
+ const toolkitEntry = `${data}/node_modules/@narai/connector-toolkit/dist/plugin/reminder.js`;
9
+ const mod = await import(toolkitEntry);
10
+ const decision = mod.evaluateNudge({ connectors: ["aws"] });
11
+ if (decision.nudge) {
12
+ process.stdout.write(decision.banner + "\n");
13
+ }
14
+ } catch {
15
+ // best-effort — reminder never blocks startup
16
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "aws-agent-plugin-runtime",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "description": "Runtime manifest for aws-agent-plugin. The SessionStart hook runs `npm install` on this manifest into ${CLAUDE_PLUGIN_DATA}.",
6
+ "dependencies": {
7
+ "@narai/aws-agent-connector": "file:.."
8
+ }
9
+ }
@@ -0,0 +1,70 @@
1
+ ---
2
+ name: aws-agent
3
+ description: |
4
+ Use when the user asks about read-only AWS inventory — Lambda functions,
5
+ RDS databases, S3 buckets, or CloudWatch metrics in an AWS account. Queries
6
+ are scoped to a single region (except list_buckets, which is account-wide).
7
+ Never modifies AWS resources.
8
+ context: fork
9
+ ---
10
+
11
+ # AWS Agent
12
+
13
+ Answer the user's question by invoking the `aws-agent` binary exposed by
14
+ this plugin. It delegates to `@narai/aws-agent-connector`, which speaks to
15
+ AWS via the read-only SDK v3 surface.
16
+
17
+ ## Invocation
18
+
19
+ ```
20
+ aws-agent --action <action> --params '<json>'
21
+ ```
22
+
23
+ The CLI writes a single JSON envelope to stdout and exits 0 on success, 1 on
24
+ a handled error, 2 on CLI misuse. Return the envelope verbatim to the
25
+ orchestrator — do not paraphrase or re-format.
26
+
27
+ ## Supported actions
28
+
29
+ | Action | Required params | Notes |
30
+ |---|---|---|
31
+ | `list_functions` | `region`, optional `prefix` | Returns Lambda functions in the region, optionally filtered by name prefix |
32
+ | `describe_db` | `region`, `db_identifier` | Returns an RDS instance's engine, version, endpoint, storage, and status |
33
+ | `list_buckets` | optional `prefix`, optional `region` | Returns S3 buckets across the account |
34
+ | `get_metrics` | `region`, `namespace`, `metric_name`, `dimensions`, optional `hours` (default 24, max 168) | CloudWatch datapoints at 5-min resolution |
35
+
36
+ Example:
37
+
38
+ ```bash
39
+ aws-agent --action list_functions --params '{"region":"us-east-1","prefix":"acme-"}'
40
+ ```
41
+
42
+ ## Envelope shape
43
+
44
+ Success:
45
+ ```json
46
+ {"status": "success", "action": "<name>", "data": { ... }}
47
+ ```
48
+
49
+ Error (handled):
50
+ ```json
51
+ {"status": "error", "action": "<name>", "error_code": "<CODE>", "message": "...", "retriable": true}
52
+ ```
53
+
54
+ Known error codes: `VALIDATION_ERROR`, `AUTH_ERROR`, `NOT_FOUND`,
55
+ `RATE_LIMITED`, `TIMEOUT`, `CONNECTION_ERROR`, `CONFIG_ERROR`,
56
+ `CONFIGURATION_ERROR`.
57
+
58
+ ## Credentials
59
+
60
+ The connector uses the default AWS credential chain — profiles,
61
+ environment variables, instance/container/EKS roles — whichever is
62
+ configured on the host. If both `AWS_ACCESS_KEY_ID` and
63
+ `AWS_SECRET_ACCESS_KEY` are set via `@narai/credential-providers`, those
64
+ take precedence.
65
+
66
+ ## Safety
67
+
68
+ Read-only by construction: only `Describe*`, `List*`, and `Get*` SDK
69
+ commands are whitelisted inside the connector. Write/modify operations
70
+ cannot be invoked through this skill.