generated at
選択範囲をKeichoに尋ねるPopupMenu
askKeichoを使ったUserScriptのテストを兼ねて作ってみる
↑を使わずにkeichoに尋ねられる事がわかった

使い方
1. askKeichoを導入する
(たぶんreloadが必要)
2. 選択範囲をKeichoに尋ねるPopupMenu#60d9975a1280f00000f205bfを自分のページに貼り付けるか開発コンソールで実行する

2021-06-30
13:52:32 askKeichoを使わずに直接fetchするように変えた
09:45:12 引用が返ってきたときに余計な改行が含まれていた
2021-06-28
21:15:37 使い勝手を向上させればかなり便利になりそう
本家と違ってリンク入力補完 (scrapbox)の支援を受けて回答できる点がよい
使い勝手を向上させるにはどうすればいいか
いちいち選択せずに訪ねられるようにする?
18:56:34 talk IDを保存できるようにした
keicho.json というコードブロックに書き込まれたtalk IDを使って会話を継続する
存在しない場合は新規に会話を始める。その際コードブロックが自動で書き込まれる

18:35:42 最初の会話はできた
talk IDを保存していないから、これ以上続けられないな……
どういうふうにtalk IDを維持したらいいだろうか?
ページごとに使用するtalk IDを一つに絞る
ID自体はページのどこかに書いておく
ページ遷移するとIDがリセットされる
IDはコードブロック記法で書いておこう
こんな感じで
keicho.json
{"talk": "bK5EEz64e3E2Ye33PFig"}

test
Keichoをscrapboxから使いたい
nisbotその「scrapbox」は、どんな「scrapbox」ですか?
手軽に思考を書き出せるwiki
nisbotその「wiki」は、どんな「wiki」ですか?
リンクを使って書いた情報を繋げられる
nisbotその「リンク」は、どんな「リンク」ですか?
双方向にリンクできる。また、リンク先をリンクしているページも閲覧できる
nisbotその「リンク」について、他に何かありますか?
思考を書き出しているときにリンクを曖昧入力補完できる
nisbotその「リンク」は、どこにありますか?
scrapbox.ioに格納されている
nisbot
>
思考を書き出しているときにリンクを曖昧入力補完できる

この「リンク」は、どのあたりにありますか?
(おっと改行が変に含まれてしまった)
思考の外にある。それを入力補完で引っ張ってきてくれる
nisbotその「思考」は、どんな「思考」ですか?
書いている人がその瞬間に脳内で張り巡らせていること、かな。書き出している文字列も思考とみなせるかも
nisbotその「思考」について、他に何かありますか?
脳内で張り巡らせているだけだと気づけないことを、書き出して永続化することと入力補完で思考の外から材料を引っ張り出すこととで気づかせてくれる
nisbotあなたが価値を感じているのは何ですか?
(話が飛びましたね)
目に見える形で外に出されたものに価値を感じている
テキストとして書き出されたもの
実際に動くprogram・アプリ
模型
nisbotその「外」は、どんな「外」ですか?
(改行こみで投げても読み取ってくれるようだ)

js
import('/api/code/takker/選択範囲をKeichoに尋ねるPopupMenu/script.js');
script.js
import {insertText} from '../scrapbox-insert-text-2/script.js'; scrapbox.PopupMenu.addButton({ title: '🤖', onClick: text => { (async () => { // idを取得する const id = await getTalkId(); const {id: _id, text: answer} = await askKeicho(text, {id}); // idが更新されたら新しいコードブロックを作る const code = id !== _id ? [ 'code:keicho.json', ` {"talk": "${_id}"}\n`, ].join('\n') : ''; await insertText(`${code}[/nishio/nisbot.icon]${answer.replace(/\n+/g, '\n').replaceAll('>\n', '\n')}`); })(); // botの記入欄を作っておく return `${text}\n`; } });

talk idを取得する
keicho.json というcode blockに保存しておく
JSON.parse()が失敗するかどうかで、JSONが含まれるcode blockかどうかを判定している
このままだとJSONが一行だけの時しか対応できないな
まあ別にいいか
2021-07-24 16:06:09 scrapboxのページ中の同名のcode blockを結合して取り出すことで、複数行のcode blockに対応できるようにした
script.js
import {getCodeBlockText} from '../scrapboxのページ中の同名のcode_blockを結合して取り出/script.js'; async function getTalkId() { // code blockを探す const text = getCodeBlockText('keicho.json', scrapbox.Page.lines); // JSONとして読み込んで、talk IDを取得する try { const json = JSON.parse(text); return json.talk; } catch(e) { return; } }

#2021-07-29 03:52:49
#2021-07-24 16:09:00
#2021-06-30 09:39:58
#2021-06-28 18:28:42