@wirecat/cli-memo 0.131.70 → 0.131.72
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.
- package/README.md +3 -3
- package/THIRD_PARTY_NOTICES +2 -0
- package/dist/actions/actions.d.ts +2 -1
- package/dist/actions/actions.d.ts.map +1 -1
- package/dist/actions/actions.js +5 -3
- package/dist/actions/actions.js.map +1 -1
- package/dist/actions/command.d.ts.map +1 -1
- package/dist/actions/command.js +15 -6
- package/dist/actions/command.js.map +1 -1
- package/dist/answer.d.ts +1 -0
- package/dist/answer.d.ts.map +1 -1
- package/dist/answer.js +2 -1
- package/dist/answer.js.map +1 -1
- package/dist/bin/memo.js +2 -2
- package/dist/bin/memo.js.map +1 -1
- package/dist/bundle/{all-profiles-6JKSPBBO.js → all-profiles-G6S5HOBT.js} +5 -5
- package/dist/bundle/{anthropic-YA2N6EJ4.js → anthropic-LA6PXTPQ.js} +2 -2
- package/dist/bundle/{app-server-UP3AL2XQ.js → app-server-SESNZIAV.js} +35 -35
- package/dist/bundle/auto-WU47LYXJ.js +85 -0
- package/dist/bundle/{bun-OUFOAYV4.js → bun-PZNVNH4G.js} +2 -2
- package/dist/bundle/{bun-sqlite-5RZTFU2Q.js → bun-sqlite-VICDK5FS.js} +2 -2
- package/dist/bundle/{chunk-GVP6CAPH.js → chunk-2RNNWFU7.js} +33 -586
- package/dist/bundle/{chunk-OHA7HDPX.js → chunk-2VETW2QK.js} +1024 -676
- package/dist/bundle/{chunk-IHHXGTMX.js → chunk-3LS76TFB.js} +1 -1
- package/dist/bundle/{chunk-N73YBQ42.js → chunk-3ZSPTUG3.js} +9 -7
- package/dist/bundle/{chunk-7OXLZZ27.js → chunk-5XRCF57Z.js} +86 -2
- package/dist/bundle/{chunk-RHW3DDWI.js → chunk-6B3GQMR6.js} +1 -1
- package/dist/bundle/{chunk-EDPA54WQ.js → chunk-6Z62U7NY.js} +3 -3
- package/dist/bundle/{chunk-IJAILIZR.js → chunk-A4UQKFGY.js} +18 -18
- package/dist/bundle/{chunk-JMGQATR6.js → chunk-ASDOPGKC.js} +2 -2
- package/dist/bundle/{chunk-52F4LHCH.js → chunk-B7LGXY3S.js} +4 -4
- package/dist/bundle/{chunk-FQ54GW57.js → chunk-BD7AGXJJ.js} +8366 -8360
- package/dist/bundle/{chunk-FZHYGJQ2.js → chunk-CLQXHFKG.js} +5 -5
- package/dist/bundle/{chunk-VPKJZKXV.js → chunk-CPUQC7UF.js} +1 -1
- package/dist/bundle/{chunk-5OMM4CDT.js → chunk-ESYCZ575.js} +2 -2
- package/dist/bundle/{chunk-YXXAPVAZ.js → chunk-FDSM2TU6.js} +8 -8
- package/dist/bundle/{chunk-YBTUFOQG.js → chunk-FENNNSCI.js} +5 -5
- package/dist/bundle/{chunk-OBQ7TSUB.js → chunk-FHIGY5K6.js} +1 -1
- package/dist/bundle/{chunk-57SQU2YO.js → chunk-FOPDWCRG.js} +10 -6
- package/dist/bundle/{chunk-MK6SQ32Q.js → chunk-FPWF2XLH.js} +12 -12
- package/dist/bundle/{chunk-MYLNRBDF.js → chunk-FVJSDDSV.js} +46 -13
- package/dist/bundle/{chunk-EQKS6M52.js → chunk-FXZ7PQKG.js} +5 -5
- package/dist/bundle/{chunk-TV75OHKJ.js → chunk-G3FQTKHT.js} +7 -7
- package/dist/bundle/{chunk-WNA2WNDK.js → chunk-G7XOBQB5.js} +3 -3
- package/dist/bundle/{chunk-PSYQPO6D.js → chunk-H3LAORYX.js} +2 -2
- package/dist/bundle/{chunk-2DQYP2K3.js → chunk-HIHZNBR7.js} +1 -1
- package/dist/bundle/{chunk-22CDLXSR.js → chunk-I4HWKPQR.js} +4 -4
- package/dist/bundle/{chunk-QAXIZHK7.js → chunk-II2SXJEO.js} +33 -33
- package/dist/bundle/{chunk-2NFI7SDW.js → chunk-INQAQ55X.js} +2304 -1111
- package/dist/bundle/{chunk-LYAJUZM4.js → chunk-IRBYZUI7.js} +30 -30
- package/dist/bundle/{chunk-EO4JMJFZ.js → chunk-IXZWUHSG.js} +7 -7
- package/dist/bundle/{chunk-MWQI6FSU.js → chunk-K55WZ67L.js} +3 -3
- package/dist/bundle/{chunk-YTJWIJIG.js → chunk-KH43CUE2.js} +5 -5
- package/dist/bundle/{chunk-2C7Z7CKD.js → chunk-LIF2HXIQ.js} +1 -1
- package/dist/bundle/{chunk-3LGLKLBA.js → chunk-M2DAITNE.js} +2 -2
- package/dist/bundle/{chunk-OAO5UCPJ.js → chunk-MAGAWAPG.js} +1366 -1574
- package/dist/bundle/{chunk-7JFLHRQL.js → chunk-MKOQDN3I.js} +1 -1
- package/dist/bundle/{chunk-67VEVKMJ.js → chunk-MSTWHRLN.js} +1 -1
- package/dist/bundle/{chunk-GGFL64HF.js → chunk-NRLXWY4Q.js} +13170 -11987
- package/dist/bundle/{chunk-267N22E4.js → chunk-PGOMGFXA.js} +1 -1
- package/dist/bundle/{chunk-4HSWIXYE.js → chunk-PHL53ERQ.js} +4 -4
- package/dist/bundle/{chunk-53EAI4VZ.js → chunk-QUPPO7DB.js} +1 -1
- package/dist/bundle/{chunk-276KPJI5.js → chunk-RF6KPQWV.js} +2 -2
- package/dist/bundle/{chunk-3OEV7GNU.js → chunk-RGIS2DRA.js} +4 -4
- package/dist/bundle/{chunk-TXOXPQN2.js → chunk-SL2LXOCN.js} +2 -2
- package/dist/bundle/{chunk-QZU5IM5E.js → chunk-SR7C53CS.js} +2 -2
- package/dist/bundle/{chunk-ECHN36DC.js → chunk-STJWETNW.js} +4 -4
- package/dist/bundle/{chunk-BGWPKEKK.js → chunk-SVVSGUMU.js} +4 -4
- package/dist/bundle/{chunk-GVEY6743.js → chunk-THPGFRPZ.js} +9 -9
- package/dist/bundle/{chunk-V2YS63Z5.js → chunk-U3P5F57B.js} +1 -1
- package/dist/bundle/{chunk-PHSYMVYX.js → chunk-UCRR7R6Q.js} +2 -2
- package/dist/bundle/{chunk-2F35N6BI.js → chunk-UX52EWLQ.js} +1 -1
- package/dist/bundle/{chunk-XTEJXJJ3.js → chunk-WT2P44YD.js} +10 -10
- package/dist/bundle/{chunk-UEMI6FXR.js → chunk-XNX3U6GD.js} +6 -6
- package/dist/bundle/{chunk-3TFK7RBA.js → chunk-XXEHPPNS.js} +23908 -22107
- package/dist/bundle/{chunk-5EHUHZU5.js → chunk-YBL4QKLV.js} +80 -68
- package/dist/bundle/{chunk-7L4PBN5S.js → chunk-ZM6J47GY.js} +2 -2
- package/dist/bundle/{command-contract-OGW2DX4C.js → command-contract-7QECBB6M.js} +11 -11
- package/dist/bundle/{decode-IJMDTGTW.js → decode-WRWXOJML.js} +2 -2
- package/dist/bundle/{echarts-EHYUXOKP.js → echarts-MTCNTCST.js} +2 -2
- package/dist/bundle/{embed-RUY3UIVC.js → embed-PPPCHSTE.js} +3 -3
- package/dist/bundle/{embedder-P6WBMEGP.js → embedder-UJBIX6A2.js} +6 -6
- package/dist/bundle/{entry-7S2ONYSF.js → entry-W6SHKRBE.js} +4 -4
- package/dist/bundle/failure-NRJ3EPBO.js +65 -0
- package/dist/bundle/{first-run-MLIFZSVH.js → first-run-7HAWGQ3B.js} +5 -5
- package/dist/bundle/{first-screen-DGTTK6VK.js → first-screen-FRRTKWFB.js} +12 -12
- package/dist/bundle/{instructions-ZMG4FLGO.js → instructions-JKIO4JF7.js} +1 -1
- package/dist/bundle/{mcp-CFIL7WZU.js → mcp-OL6ZYF2T.js} +35 -35
- package/dist/bundle/memo.js +14 -11
- package/dist/bundle/{node-QYL4B7JS.js → node-3AIXDDDR.js} +2 -2
- package/dist/bundle/{node-sqlite-ESTT2OCF.js → node-sqlite-NX722DXD.js} +3 -3
- package/dist/bundle/{oauth-CFQFSIRQ.js → oauth-2NPSI7Q3.js} +4 -4
- package/dist/bundle/{open-3XO2HMIT.js → open-AFRN6Q36.js} +2 -2
- package/dist/bundle/{openai-STUNDBD6.js → openai-U5CQFLRU.js} +7 -7
- package/dist/bundle/{process-P4UAJCZX.js → process-J2IBN6X7.js} +1 -1
- package/dist/bundle/{program-RSUVU6HA.js → program-MRG4ZQQI.js} +2107 -516
- package/dist/bundle/{prompt-ZCYMFMIG.js → prompt-6XNKR4VQ.js} +2 -2
- package/dist/bundle/{recognize-V3BY33FK.js → recognize-G3GI32QS.js} +1 -1
- package/dist/bundle/{remote-IP4QR7SP.js → remote-DJO255PT.js} +4 -4
- package/dist/bundle/{rerank-VKUSF3DM.js → rerank-5SBZRIHF.js} +4 -4
- package/dist/bundle/{serve-VBIUARHJ.js → serve-BZVBKGU3.js} +6 -6
- package/dist/bundle/server-AEZPZ3ZD.js +48 -0
- package/dist/bundle/server-CIT5B2SV.js +61 -0
- package/dist/bundle/{server-BVRPQPGY.js → server-D5BJDKTJ.js} +62 -53
- package/dist/bundle/{state-UBAIZ2WP.js → state-A57F7T5D.js} +3 -3
- package/dist/bundle/{store-VQQVUA4W.js → store-JXD7SGIK.js} +9 -9
- package/dist/bundle/store-maintenance-command-5DG4SEQA.js +47 -0
- package/dist/bundle/update-NI24ED4V.js +68 -0
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/context/command.d.ts +2 -1
- package/dist/context/command.d.ts.map +1 -1
- package/dist/context/command.js +34 -12
- package/dist/context/command.js.map +1 -1
- package/dist/context/context.d.ts +20 -8
- package/dist/context/context.d.ts.map +1 -1
- package/dist/context/context.js +65 -40
- package/dist/context/context.js.map +1 -1
- package/dist/contract-overrides/search.js +1 -1
- package/dist/contract-overrides/search.js.map +1 -1
- package/dist/digest/digest.d.ts.map +1 -1
- package/dist/digest/digest.js +2 -1
- package/dist/digest/digest.js.map +1 -1
- package/dist/discovery/command.d.ts.map +1 -1
- package/dist/discovery/command.js +2 -0
- package/dist/discovery/command.js.map +1 -1
- package/dist/doctor/command.d.ts +22 -2
- package/dist/doctor/command.d.ts.map +1 -1
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +60 -10
- package/dist/examples.js.map +1 -1
- package/dist/facts/command.d.ts.map +1 -1
- package/dist/facts/command.js +7 -6
- package/dist/facts/command.js.map +1 -1
- package/dist/finance/deal-text.d.ts +4 -0
- package/dist/finance/deal-text.d.ts.map +1 -0
- package/dist/finance/deal-text.js +34 -0
- package/dist/finance/deal-text.js.map +1 -0
- package/dist/finance/deals-command.d.ts +1 -1
- package/dist/finance/deals-command.d.ts.map +1 -1
- package/dist/finance/deals-command.js +113 -13
- package/dist/finance/deals-command.js.map +1 -1
- package/dist/knowledge/business-text.d.ts +7 -0
- package/dist/knowledge/business-text.d.ts.map +1 -0
- package/dist/knowledge/business-text.js +19 -0
- package/dist/knowledge/business-text.js.map +1 -0
- package/dist/knowledge/command.d.ts +1 -1
- package/dist/knowledge/command.d.ts.map +1 -1
- package/dist/knowledge/command.js +131 -42
- package/dist/knowledge/command.js.map +1 -1
- package/dist/knowledge/money-text.d.ts +4 -0
- package/dist/knowledge/money-text.d.ts.map +1 -0
- package/dist/knowledge/money-text.js +16 -0
- package/dist/knowledge/money-text.js.map +1 -0
- package/dist/knowledge/organization-text.d.ts +7 -0
- package/dist/knowledge/organization-text.d.ts.map +1 -0
- package/dist/knowledge/organization-text.js +24 -0
- package/dist/knowledge/organization-text.js.map +1 -0
- package/dist/knowledge/project-actions-command.js +1 -1
- package/dist/knowledge/project-actions-command.js.map +1 -1
- package/dist/knowledge/project-actions.d.ts +1 -1
- package/dist/knowledge/project-actions.d.ts.map +1 -1
- package/dist/knowledge/project-actions.js +2 -2
- package/dist/knowledge/project-actions.js.map +1 -1
- package/dist/knowledge/project-context.d.ts +27 -1
- package/dist/knowledge/project-context.d.ts.map +1 -1
- package/dist/knowledge/project-context.js +9 -5
- package/dist/knowledge/project-context.js.map +1 -1
- package/dist/knowledge/project-status-command.d.ts.map +1 -1
- package/dist/knowledge/project-status-command.js +21 -5
- package/dist/knowledge/project-status-command.js.map +1 -1
- package/dist/knowledge/relationships.d.ts +27 -23
- package/dist/knowledge/relationships.d.ts.map +1 -1
- package/dist/knowledge/relationships.js +65 -52
- package/dist/knowledge/relationships.js.map +1 -1
- package/dist/knowledge/roles-command.d.ts +8 -0
- package/dist/knowledge/roles-command.d.ts.map +1 -0
- package/dist/knowledge/roles-command.js +65 -0
- package/dist/knowledge/roles-command.js.map +1 -0
- package/dist/mcp/catalogue.d.ts +19 -1
- package/dist/mcp/catalogue.d.ts.map +1 -1
- package/dist/mcp/catalogue.js +9 -1
- package/dist/mcp/catalogue.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/memories/command.d.ts.map +1 -1
- package/dist/memories/command.js +6 -5
- package/dist/memories/command.js.map +1 -1
- package/dist/memories/sources.js +2 -2
- package/dist/memories/sources.js.map +1 -1
- package/dist/models/command.d.ts +1 -1
- package/dist/models/command.d.ts.map +1 -1
- package/dist/models/command.js +2 -1
- package/dist/models/command.js.map +1 -1
- package/dist/notes/command.d.ts.map +1 -1
- package/dist/notes/command.js +13 -8
- package/dist/notes/command.js.map +1 -1
- package/dist/notes/embed.d.ts +6 -1
- package/dist/notes/embed.d.ts.map +1 -1
- package/dist/notes/embed.js +17 -8
- package/dist/notes/embed.js.map +1 -1
- package/dist/people/command.d.ts.map +1 -1
- package/dist/people/command.js +7 -2
- package/dist/people/command.js.map +1 -1
- package/dist/people/identities-command.d.ts +5 -0
- package/dist/people/identities-command.d.ts.map +1 -0
- package/dist/people/identities-command.js +179 -0
- package/dist/people/identities-command.js.map +1 -0
- package/dist/people/identity.d.ts +5 -0
- package/dist/people/identity.d.ts.map +1 -1
- package/dist/people/identity.js +19 -2
- package/dist/people/identity.js.map +1 -1
- package/dist/program.d.ts +15 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +191 -5
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +84 -0
- package/dist/reasons.js.map +1 -1
- package/dist/review/command.js +2 -2
- package/dist/review/command.js.map +1 -1
- package/dist/review/kinds.d.ts +1 -1
- package/dist/review/kinds.d.ts.map +1 -1
- package/dist/review/kinds.js +1 -0
- package/dist/review/kinds.js.map +1 -1
- package/dist/review/review.d.ts +3 -3
- package/dist/review/review.d.ts.map +1 -1
- package/dist/review/review.js +6 -6
- package/dist/review/review.js.map +1 -1
- package/dist/review/status.d.ts.map +1 -1
- package/dist/review/status.js +5 -4
- package/dist/review/status.js.map +1 -1
- package/dist/run/import.d.ts +8 -2
- package/dist/run/import.d.ts.map +1 -1
- package/dist/run/import.js +31 -11
- package/dist/run/import.js.map +1 -1
- package/dist/search/command.d.ts.map +1 -1
- package/dist/search/command.js +21 -3
- package/dist/search/command.js.map +1 -1
- package/dist/search/denied.d.ts +10 -0
- package/dist/search/denied.d.ts.map +1 -0
- package/dist/search/denied.js +10 -0
- package/dist/search/denied.js.map +1 -0
- package/dist/search/people.d.ts.map +1 -1
- package/dist/search/people.js +11 -1
- package/dist/search/people.js.map +1 -1
- package/dist/search/search.d.ts +2 -0
- package/dist/search/search.d.ts.map +1 -1
- package/dist/search/search.js +37 -12
- package/dist/search/search.js.map +1 -1
- package/dist/sources/command.d.ts +3 -1
- package/dist/sources/command.d.ts.map +1 -1
- package/dist/sources/command.js +3 -1
- package/dist/sources/command.js.map +1 -1
- package/dist/sources/readers/api.d.ts +4 -0
- package/dist/sources/readers/api.d.ts.map +1 -0
- package/dist/sources/readers/api.js +48 -0
- package/dist/sources/readers/api.js.map +1 -0
- package/dist/sources/readers/claude-code.d.ts +7 -0
- package/dist/sources/readers/claude-code.d.ts.map +1 -0
- package/dist/sources/readers/claude-code.js +74 -0
- package/dist/sources/readers/claude-code.js.map +1 -0
- package/dist/sources/readers/codex.d.ts +7 -0
- package/dist/sources/readers/codex.d.ts.map +1 -0
- package/dist/sources/readers/codex.js +72 -0
- package/dist/sources/readers/codex.js.map +1 -0
- package/dist/sources/readers/index.d.ts +6 -0
- package/dist/sources/readers/index.d.ts.map +1 -0
- package/dist/sources/readers/index.js +8 -0
- package/dist/sources/readers/index.js.map +1 -0
- package/dist/sources/readers/keys.d.ts +13 -0
- package/dist/sources/readers/keys.d.ts.map +1 -0
- package/dist/sources/readers/keys.js +25 -0
- package/dist/sources/readers/keys.js.map +1 -0
- package/dist/sources/readers/ollama.d.ts +3 -0
- package/dist/sources/readers/ollama.d.ts.map +1 -0
- package/dist/sources/readers/ollama.js +60 -0
- package/dist/sources/readers/ollama.js.map +1 -0
- package/dist/sources/readers/process.d.ts +16 -0
- package/dist/sources/readers/process.d.ts.map +1 -0
- package/dist/sources/readers/process.js +49 -0
- package/dist/sources/readers/process.js.map +1 -0
- package/dist/sources/readers/types.d.ts +38 -0
- package/dist/sources/readers/types.d.ts.map +1 -0
- package/dist/sources/readers/types.js +2 -0
- package/dist/sources/readers/types.js.map +1 -0
- package/dist/sources/suggest-command.d.ts +9 -0
- package/dist/sources/suggest-command.d.ts.map +1 -0
- package/dist/sources/suggest-command.js +202 -0
- package/dist/sources/suggest-command.js.map +1 -0
- package/dist/sources/suggest.d.ts +56 -0
- package/dist/sources/suggest.d.ts.map +1 -0
- package/dist/sources/suggest.js +143 -0
- package/dist/sources/suggest.js.map +1 -0
- package/dist/store/group.d.ts +38 -0
- package/dist/store/group.d.ts.map +1 -0
- package/dist/store/group.js +112 -0
- package/dist/store/group.js.map +1 -0
- package/dist/store/groups-command.d.ts +10 -0
- package/dist/store/groups-command.d.ts.map +1 -0
- package/dist/store/groups-command.js +88 -0
- package/dist/store/groups-command.js.map +1 -0
- package/dist/store/guard.d.ts +29 -0
- package/dist/store/guard.d.ts.map +1 -0
- package/dist/store/guard.js +94 -0
- package/dist/store/guard.js.map +1 -0
- package/dist/store/scope.d.ts +3 -3
- package/dist/store/scope.d.ts.map +1 -1
- package/dist/store/scope.js +7 -6
- package/dist/store/scope.js.map +1 -1
- package/dist/store/source-list.d.ts +5 -1
- package/dist/store/source-list.d.ts.map +1 -1
- package/dist/store/source-list.js +30 -15
- package/dist/store/source-list.js.map +1 -1
- package/dist/tags/command.d.ts.map +1 -1
- package/dist/tags/command.js +3 -2
- package/dist/tags/command.js.map +1 -1
- package/dist/tasks/shared.d.ts.map +1 -1
- package/dist/tasks/shared.js +2 -1
- package/dist/tasks/shared.js.map +1 -1
- package/dist/tasks/tasks.js +3 -3
- package/dist/tasks/tasks.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +5 -4
- package/skills/cli-memo/SKILL.md +9 -9
- package/skills/cli-memo/topics/mcp.md +9 -0
- package/skills/cli-memo/topics/money.md +14 -1
- package/skills/cli-memo/topics/projects.md +2 -1
- package/skills/cli-memo/topics/proposals.md +40 -1
- package/skills/cli-memo/topics/search.md +15 -5
- package/dist/bundle/auto-CVILDIC6.js +0 -85
- package/dist/bundle/failure-HM55W3NH.js +0 -65
- package/dist/bundle/server-AASCSGCI.js +0 -61
- package/dist/bundle/server-YQLPZK4Z.js +0 -48
- package/dist/bundle/store-maintenance-command-GCBABKEZ.js +0 -47
- package/dist/bundle/update-ZE53ASCW.js +0 -68
- /package/dist/bundle/{chunk-AWVQHWIS.js → chunk-YSYFOIW7.js} +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { CliError } from "@wirecat/cli-base";
|
|
5
|
+
import { firstLine, runProgram } from "./process.js";
|
|
6
|
+
/**
|
|
7
|
+
* The owner's own signed-in Claude Code, with every tool, MCP server, hook, slash command and saved session off,
|
|
8
|
+
* started in an empty folder: it only reads the text on stdin and answers.
|
|
9
|
+
*/
|
|
10
|
+
export const claudeCode = {
|
|
11
|
+
id: "claude-code",
|
|
12
|
+
title: "Claude Code",
|
|
13
|
+
provider: "anthropic",
|
|
14
|
+
leavesComputer: true,
|
|
15
|
+
readsFiles: false,
|
|
16
|
+
needsModel: false,
|
|
17
|
+
probe: async ({ env, signal }) => {
|
|
18
|
+
const version = await runProgram("claude", ["--version"], { env, ...(signal ? { signal } : {}) });
|
|
19
|
+
if (version?.code !== 0)
|
|
20
|
+
return {
|
|
21
|
+
available: false,
|
|
22
|
+
signedIn: null,
|
|
23
|
+
version: null,
|
|
24
|
+
models: null,
|
|
25
|
+
problem: "Claude Code is not installed",
|
|
26
|
+
};
|
|
27
|
+
const status = await runProgram("claude", ["auth", "status", "--json"], { env, ...(signal ? { signal } : {}) });
|
|
28
|
+
let signedIn = false;
|
|
29
|
+
try {
|
|
30
|
+
signedIn = JSON.parse(status?.stdout ?? "").loggedIn === true;
|
|
31
|
+
}
|
|
32
|
+
catch { }
|
|
33
|
+
return {
|
|
34
|
+
available: true,
|
|
35
|
+
signedIn,
|
|
36
|
+
version: firstLine(version.stdout),
|
|
37
|
+
models: null,
|
|
38
|
+
problem: signedIn ? null : "Claude Code is not signed in: run claude auth login",
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
read: async ({ env, signal }, { system, prompt, model }) => {
|
|
42
|
+
const folder = mkdtempSync(join(tmpdir(), "memo-reader-"));
|
|
43
|
+
try {
|
|
44
|
+
const ran = await runProgram("claude", [
|
|
45
|
+
"--print",
|
|
46
|
+
"--output-format",
|
|
47
|
+
"text",
|
|
48
|
+
"--tools",
|
|
49
|
+
"",
|
|
50
|
+
"--disallowedTools",
|
|
51
|
+
"mcp__*",
|
|
52
|
+
"--strict-mcp-config",
|
|
53
|
+
"--settings",
|
|
54
|
+
'{"disableAllHooks":true}',
|
|
55
|
+
"--disable-slash-commands",
|
|
56
|
+
"--no-session-persistence",
|
|
57
|
+
"--system-prompt",
|
|
58
|
+
system,
|
|
59
|
+
...(model ? ["--model", model] : []),
|
|
60
|
+
], { env, cwd: folder, stdin: prompt, ...(signal ? { signal } : {}) });
|
|
61
|
+
if (!ran)
|
|
62
|
+
throw new CliError("configuration_error", "Claude Code is not installed", { reason: "reader.unavailable" });
|
|
63
|
+
if (ran.code !== 0)
|
|
64
|
+
throw new CliError("invalid_response", `Claude Code failed: ${firstLine(ran.stderr || ran.stdout)}`, {
|
|
65
|
+
reason: "reader.failed",
|
|
66
|
+
});
|
|
67
|
+
return ran.stdout;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
rmSync(folder, { recursive: true, force: true });
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/sources/readers/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Reader } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The owner's own signed-in Codex CLI in a read-only sandbox and an empty folder. It is an agent that can still read
|
|
4
|
+
* files of this computer, which `readers` says.
|
|
5
|
+
*/
|
|
6
|
+
export declare const codex: Reader;
|
|
7
|
+
//# sourceMappingURL=codex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/codex.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,MA8DnB,CAAA"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { CliError } from "@wirecat/cli-base";
|
|
5
|
+
import { firstLine, runProgram } from "./process.js";
|
|
6
|
+
/**
|
|
7
|
+
* The owner's own signed-in Codex CLI in a read-only sandbox and an empty folder. It is an agent that can still read
|
|
8
|
+
* files of this computer, which `readers` says.
|
|
9
|
+
*/
|
|
10
|
+
export const codex = {
|
|
11
|
+
id: "codex",
|
|
12
|
+
title: "Codex CLI",
|
|
13
|
+
provider: "openai",
|
|
14
|
+
leavesComputer: true,
|
|
15
|
+
readsFiles: true,
|
|
16
|
+
needsModel: false,
|
|
17
|
+
probe: async ({ env, signal }) => {
|
|
18
|
+
const version = await runProgram("codex", ["--version"], { env, ...(signal ? { signal } : {}) });
|
|
19
|
+
if (version?.code !== 0)
|
|
20
|
+
return { available: false, signedIn: null, version: null, models: null, problem: "Codex CLI is not installed" };
|
|
21
|
+
const status = await runProgram("codex", ["login", "status"], { env, ...(signal ? { signal } : {}) });
|
|
22
|
+
const signedIn = status?.code === 0;
|
|
23
|
+
return {
|
|
24
|
+
available: true,
|
|
25
|
+
signedIn,
|
|
26
|
+
version: firstLine(version.stdout),
|
|
27
|
+
models: null,
|
|
28
|
+
problem: signedIn ? null : "Codex CLI is not signed in: run codex login",
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
read: async ({ env, signal }, { system, prompt, model }) => {
|
|
32
|
+
const folder = mkdtempSync(join(tmpdir(), "memo-reader-"));
|
|
33
|
+
const answer = join(folder, "answer.txt");
|
|
34
|
+
try {
|
|
35
|
+
const ran = await runProgram("codex", [
|
|
36
|
+
"exec",
|
|
37
|
+
"--sandbox",
|
|
38
|
+
"read-only",
|
|
39
|
+
"--skip-git-repo-check",
|
|
40
|
+
"--ephemeral",
|
|
41
|
+
"--ignore-user-config",
|
|
42
|
+
"--ignore-rules",
|
|
43
|
+
"--color",
|
|
44
|
+
"never",
|
|
45
|
+
"--cd",
|
|
46
|
+
folder,
|
|
47
|
+
"--output-last-message",
|
|
48
|
+
answer,
|
|
49
|
+
...(model ? ["--model", model] : []),
|
|
50
|
+
"-",
|
|
51
|
+
],
|
|
52
|
+
// codex exec has no system prompt of its own; the instructions lead the input.
|
|
53
|
+
{ env, cwd: folder, stdin: `${system}\n\n${prompt}`, ...(signal ? { signal } : {}) });
|
|
54
|
+
if (!ran)
|
|
55
|
+
throw new CliError("configuration_error", "Codex CLI is not installed", { reason: "reader.unavailable" });
|
|
56
|
+
if (ran.code !== 0)
|
|
57
|
+
throw new CliError("invalid_response", `Codex CLI failed: ${firstLine(ran.stderr || ran.stdout)}`, {
|
|
58
|
+
reason: "reader.failed",
|
|
59
|
+
});
|
|
60
|
+
try {
|
|
61
|
+
return readFileSync(answer, "utf8");
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return ran.stdout;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
rmSync(folder, { recursive: true, force: true });
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../../src/sources/readers/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Reader } from "./types.js";
|
|
2
|
+
export type { Reader, ReaderContext, ReaderProbe } from "./types.js";
|
|
3
|
+
export declare const READERS: readonly Reader[];
|
|
4
|
+
export declare const READER_IDS: string[];
|
|
5
|
+
export declare const readerOf: (id: string) => Reader | undefined;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAEpE,eAAO,MAAM,OAAO,EAAE,SAAS,MAAM,EAA+D,CAAA;AAEpG,eAAO,MAAM,UAAU,UAAqC,CAAA;AAE5D,eAAO,MAAM,QAAQ,OAAQ,MAAM,KAAG,MAAM,GAAG,SAAuD,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { anthropicReader, openaiReader } from "./api.js";
|
|
2
|
+
import { claudeCode } from "./claude-code.js";
|
|
3
|
+
import { codex } from "./codex.js";
|
|
4
|
+
import { ollama } from "./ollama.js";
|
|
5
|
+
export const READERS = [claudeCode, codex, ollama, openaiReader, anthropicReader];
|
|
6
|
+
export const READER_IDS = READERS.map((reader) => reader.id);
|
|
7
|
+
export const readerOf = (id) => READERS.find((reader) => reader.id === id);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sources/readers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAKpC,MAAM,CAAC,MAAM,OAAO,GAAsB,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,CAAC,CAAA;AAEpG,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAE5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAsB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReaderContext } from "./types.js";
|
|
2
|
+
/** Providers whose API key memo keeps. */
|
|
3
|
+
export declare const KEY_PROVIDERS: readonly ["openai", "anthropic"];
|
|
4
|
+
export type KeyProvider = (typeof KEY_PROVIDERS)[number];
|
|
5
|
+
/**
|
|
6
|
+
* The owner's API key for a provider, in the keyring entry memo's enrichment reads too. No environment variable is
|
|
7
|
+
* read: a key in the environment may be another tool's, and the owner gives memo one on purpose.
|
|
8
|
+
*/
|
|
9
|
+
export declare const providerKeys: ({ env, keyring }: Pick<ReaderContext, "env" | "keyring">) => {
|
|
10
|
+
read: (provider: KeyProvider) => string | undefined;
|
|
11
|
+
write: (provider: KeyProvider, key: string) => import("@wirecat/cli-base").CredentialSource;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/keys.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,0CAA0C;AAC1C,eAAO,MAAM,aAAa,YAAI,QAAQ,EAAE,WAAW,CAAU,CAAA;AAC7D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,qBAAsB,IAAI,CAAC,aAAa,EAAE,KAAK,GAAG,SAAS,CAAC;IAYjF,IAAI,aAAa,WAAW,KAAG,MAAM,GAAG,SAAS;IACjD,KAAK,aAAa,WAAW,OAAO,MAAM;CAE7C,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Credentials, isMovedRun, resolvePaths } from "@wirecat/cli-base";
|
|
2
|
+
import { APP } from "../../app.js";
|
|
3
|
+
/** Providers whose API key memo keeps. */
|
|
4
|
+
export const KEY_PROVIDERS = ["openai", "anthropic"];
|
|
5
|
+
/**
|
|
6
|
+
* The owner's API key for a provider, in the keyring entry memo's enrichment reads too. No environment variable is
|
|
7
|
+
* read: a key in the environment may be another tool's, and the owner gives memo one on purpose.
|
|
8
|
+
*/
|
|
9
|
+
export const providerKeys = ({ env, keyring }) => {
|
|
10
|
+
const where = { appName: APP.appName, prefix: APP.envPrefix, env };
|
|
11
|
+
const credentials = new Credentials({
|
|
12
|
+
configDir: resolvePaths(where).config,
|
|
13
|
+
service: APP.appName,
|
|
14
|
+
isolated: isMovedRun(where),
|
|
15
|
+
storage: "keyring",
|
|
16
|
+
env,
|
|
17
|
+
...(keyring ? { keyring } : {}),
|
|
18
|
+
});
|
|
19
|
+
const account = (provider) => `embeddings:${provider}`;
|
|
20
|
+
return {
|
|
21
|
+
read: (provider) => credentials.read(account(provider))?.secret,
|
|
22
|
+
write: (provider, key) => credentials.write(account(provider), key, { signIn: true }),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/sources/readers/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAGlC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAU,CAAA;AAG7D;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAA0C,EAAE,EAAE;IACvF,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAA;IAClE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM;QACrC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC;QAC3B,OAAO,EAAE,SAAS;QAClB,GAAG;QACH,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,CAAC,QAAqB,EAAE,EAAE,CAAC,cAAc,QAAQ,EAAE,CAAA;IACnE,OAAO;QACL,IAAI,EAAE,CAAC,QAAqB,EAAsB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM;QAChG,KAAK,EAAE,CAAC,QAAqB,EAAE,GAAW,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAC3G,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/ollama.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAUxC,eAAO,MAAM,MAAM,EAAE,MAkDpB,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-base";
|
|
2
|
+
/** Only the Ollama on this computer: a remote one would be a way to send the text off it. */
|
|
3
|
+
const OLLAMA = "http://127.0.0.1:11434";
|
|
4
|
+
const notRunning = () => new CliError("provider_unavailable", "Ollama is not running on this computer: start it with ollama serve", {
|
|
5
|
+
reason: "reader.not-running",
|
|
6
|
+
});
|
|
7
|
+
export const ollama = {
|
|
8
|
+
id: "ollama",
|
|
9
|
+
title: "Ollama",
|
|
10
|
+
provider: "local",
|
|
11
|
+
leavesComputer: false,
|
|
12
|
+
readsFiles: false,
|
|
13
|
+
needsModel: true,
|
|
14
|
+
probe: async ({ fetch, signal }) => {
|
|
15
|
+
try {
|
|
16
|
+
const response = await fetch(`${OLLAMA}/api/tags`, { ...(signal ? { signal } : {}) });
|
|
17
|
+
const body = (await response.json());
|
|
18
|
+
const models = (body.models ?? []).flatMap((model) => (typeof model.name === "string" ? [model.name] : []));
|
|
19
|
+
return {
|
|
20
|
+
available: true,
|
|
21
|
+
signedIn: null,
|
|
22
|
+
version: null,
|
|
23
|
+
models,
|
|
24
|
+
problem: models.length ? null : "Ollama has no model: ollama pull <model>",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return {
|
|
29
|
+
available: false,
|
|
30
|
+
signedIn: null,
|
|
31
|
+
version: null,
|
|
32
|
+
models: null,
|
|
33
|
+
problem: "Ollama is not running on this computer",
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
read: async ({ fetch, signal }, { system, prompt, model }) => {
|
|
38
|
+
let response;
|
|
39
|
+
try {
|
|
40
|
+
response = await fetch(`${OLLAMA}/api/generate`, {
|
|
41
|
+
method: "POST",
|
|
42
|
+
headers: { "content-type": "application/json" },
|
|
43
|
+
body: JSON.stringify({ model, system, prompt, stream: false, format: "json" }),
|
|
44
|
+
...(signal ? { signal } : {}),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
throw notRunning();
|
|
49
|
+
}
|
|
50
|
+
if (response.status === 404)
|
|
51
|
+
throw new CliError("not_found", `Ollama has no model ${model}: ollama pull ${model}`, {
|
|
52
|
+
reason: "reader.model-missing",
|
|
53
|
+
});
|
|
54
|
+
const body = (await response.json().catch(() => ({})));
|
|
55
|
+
if (!response.ok || typeof body.response !== "string")
|
|
56
|
+
throw new CliError("invalid_response", `Ollama answered ${response.status}`, { reason: "reader.failed" });
|
|
57
|
+
return body.response;
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/sources/readers/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const readerEnv: (env: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
|
|
2
|
+
export interface Ran {
|
|
3
|
+
code: number | null;
|
|
4
|
+
stdout: string;
|
|
5
|
+
stderr: string;
|
|
6
|
+
}
|
|
7
|
+
/** Runs a reader's program to its end; `undefined` when it is not installed. */
|
|
8
|
+
export declare const runProgram: (program: string, args: string[], { env, cwd, stdin, signal }: {
|
|
9
|
+
env: NodeJS.ProcessEnv;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
stdin?: string;
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
}) => Promise<Ran | undefined>;
|
|
14
|
+
/** The first line a program printed, short enough for an answer; never the text it read. */
|
|
15
|
+
export declare const firstLine: (text: string) => string;
|
|
16
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/process.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,SAAS,QAAS,MAAM,CAAC,UAAU,KAAG,MAAM,CAAC,UAC4B,CAAA;AAEtF,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,gFAAgF;AAChF,eAAO,MAAM,UAAU,YACZ,MAAM,QACT,MAAM,EAAE,+BACe;IAAE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,KAC1G,OAAO,CAAC,GAAG,GAAG,SAAS,CAgCtB,CAAA;AAEJ,4FAA4F;AAC5F,eAAO,MAAM,SAAS,SAAU,MAAM,WAAoD,CAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { CliError } from "@wirecat/cli-base";
|
|
3
|
+
const TIMEOUT_MS = 600_000;
|
|
4
|
+
const MAX_OUTPUT = 4 * 1024 * 1024;
|
|
5
|
+
/**
|
|
6
|
+
* Variables a reader started by memo must not inherit: an API key would bill the owner's key instead of the signed-in
|
|
7
|
+
* plan, and an agent's variables would make the reader's own runs look like that agent's.
|
|
8
|
+
*/
|
|
9
|
+
const WITHHELD = ["ANTHROPIC_API_KEY", "OPENAI_API_KEY", "CLAUDECODE", "AI_AGENT", "MEMO_MCP_CLIENT"];
|
|
10
|
+
export const readerEnv = (env) => Object.fromEntries(Object.entries(env).filter(([name]) => !WITHHELD.includes(name)));
|
|
11
|
+
/** Runs a reader's program to its end; `undefined` when it is not installed. */
|
|
12
|
+
export const runProgram = (program, args, { env, cwd, stdin, signal }) => new Promise((resolve, reject) => {
|
|
13
|
+
const child = spawn(program, args, { env: readerEnv(env), cwd, stdio: ["pipe", "pipe", "pipe"], signal });
|
|
14
|
+
const out = [];
|
|
15
|
+
const err = [];
|
|
16
|
+
let bytes = 0;
|
|
17
|
+
const timer = setTimeout(() => child.kill("SIGTERM"), TIMEOUT_MS);
|
|
18
|
+
const collect = (into) => (chunk) => {
|
|
19
|
+
bytes += chunk.byteLength;
|
|
20
|
+
if (bytes > MAX_OUTPUT)
|
|
21
|
+
child.kill("SIGTERM");
|
|
22
|
+
else
|
|
23
|
+
into.push(chunk);
|
|
24
|
+
};
|
|
25
|
+
child.stdout.on("data", collect(out));
|
|
26
|
+
child.stderr.on("data", collect(err));
|
|
27
|
+
child.on("error", (error) => {
|
|
28
|
+
clearTimeout(timer);
|
|
29
|
+
if (error.code === "ENOENT")
|
|
30
|
+
resolve(undefined);
|
|
31
|
+
else if (error.name === "AbortError")
|
|
32
|
+
reject(new CliError("cancelled", `${program} was stopped`));
|
|
33
|
+
else
|
|
34
|
+
reject(error);
|
|
35
|
+
});
|
|
36
|
+
child.on("close", (code, killed) => {
|
|
37
|
+
clearTimeout(timer);
|
|
38
|
+
if (killed === "SIGTERM" && code === null)
|
|
39
|
+
return reject(new CliError("timeout", `${program} gave no answer in time, or too long an answer`, {
|
|
40
|
+
reason: "reader.timeout",
|
|
41
|
+
}));
|
|
42
|
+
resolve({ code, stdout: Buffer.concat(out).toString("utf8"), stderr: Buffer.concat(err).toString("utf8") });
|
|
43
|
+
});
|
|
44
|
+
child.stdin.on("error", () => { });
|
|
45
|
+
child.stdin.end(stdin ?? "");
|
|
46
|
+
});
|
|
47
|
+
/** The first line a program printed, short enough for an answer; never the text it read. */
|
|
48
|
+
export const firstLine = (text) => text.trim().split("\n")[0]?.slice(0, 200) ?? "";
|
|
49
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../../src/sources/readers/process.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { KeyringStore } from "@wirecat/cli-base";
|
|
2
|
+
/** What a reader needs from the run: its environment, and the network and keyring a test replaces. */
|
|
3
|
+
export interface ReaderContext {
|
|
4
|
+
env: NodeJS.ProcessEnv;
|
|
5
|
+
fetch: typeof fetch;
|
|
6
|
+
keyring?: KeyringStore;
|
|
7
|
+
signal?: AbortSignal;
|
|
8
|
+
}
|
|
9
|
+
export interface ReaderProbe {
|
|
10
|
+
available: boolean;
|
|
11
|
+
signedIn: boolean | null;
|
|
12
|
+
version: string | null;
|
|
13
|
+
/** The models a local reader has; `null` where the reader does not say. */
|
|
14
|
+
models: string[] | null;
|
|
15
|
+
/** Why it cannot read now, with the fix; `null` when it can. */
|
|
16
|
+
problem: string | null;
|
|
17
|
+
}
|
|
18
|
+
export interface ReadRequest {
|
|
19
|
+
system: string;
|
|
20
|
+
prompt: string;
|
|
21
|
+
model: string | null;
|
|
22
|
+
}
|
|
23
|
+
/** One way to have a model read a source. A new reader is one file that exports one of these. */
|
|
24
|
+
export interface Reader {
|
|
25
|
+
id: string;
|
|
26
|
+
title: string;
|
|
27
|
+
provider: string;
|
|
28
|
+
/** The text goes to a service outside this computer. */
|
|
29
|
+
leavesComputer: boolean;
|
|
30
|
+
/** The reader is an agent that could open files of this computer, though memo asks it not to. */
|
|
31
|
+
readsFiles: boolean;
|
|
32
|
+
/** It refuses to read until the owner names a model. */
|
|
33
|
+
needsModel: boolean;
|
|
34
|
+
probe(context: ReaderContext): Promise<ReaderProbe>;
|
|
35
|
+
/** The model's answer as text. */
|
|
36
|
+
read(context: ReaderContext, request: ReadRequest): Promise<string>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/sources/readers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,sGAAsG;AACtG,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;IACtB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACvB,gEAAgE;IAChE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED,iGAAiG;AACjG,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,wDAAwD;IACxD,cAAc,EAAE,OAAO,CAAA;IACvB,iGAAiG;IACjG,UAAU,EAAE,OAAO,CAAA;IACnB,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACnD,kCAAkC;IAClC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACpE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/sources/readers/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type KeyringStore, type Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { Command } from "commander";
|
|
3
|
+
export interface ReaderDeps {
|
|
4
|
+
/** What the Ollama and API readers reach the network with; a test hands in its own. */
|
|
5
|
+
fetch?: typeof fetch;
|
|
6
|
+
keyring?: KeyringStore;
|
|
7
|
+
}
|
|
8
|
+
export declare const readerCommands: (program: Command, sources: Command, streams: Streams, env: NodeJS.ProcessEnv, deps?: ReaderDeps) => void;
|
|
9
|
+
//# sourceMappingURL=suggest-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest-command.d.ts","sourceRoot":"","sources":["../../src/sources/suggest-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAe7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqBxC,MAAM,WAAW,UAAU;IACzB,uFAAuF;IACvF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAA;IACpB,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAsDD,eAAO,MAAM,cAAc,YAChB,OAAO,WACP,OAAO,WACP,OAAO,OACX,MAAM,CAAC,UAAU,SAChB,UAAU,KACf,IAqMF,CAAA"}
|