選択範囲をKeichoに尋ねるPopupMenu
使い方
(たぶんreloadが必要)
2021-06-30
09:45:12 引用が返ってきたときに余計な改行が含まれていた
2021-06-28
21:15:37 使い勝手を向上させればかなり便利になりそう
使い勝手を向上させるにはどうすればいいか
いちいち選択せずに訪ねられるようにする?
18:56:34 talk IDを保存できるようにした
keicho.json
というコードブロックに書き込まれたtalk IDを使って会話を継続する
存在しない場合は新規に会話を始める。その際コードブロックが自動で書き込まれる
18:35:42 最初の会話はできた
talk IDを保存していないから、これ以上続けられないな……
どういうふうにtalk IDを維持したらいいだろうか?
ページごとに使用するtalk IDを一つに絞る
ID自体はページのどこかに書いておく
ページ遷移するとIDがリセットされる
こんな感じで
test
Keichoをscrapboxから使いたい
その「scrapbox」は、どんな「scrapbox」ですか?
手軽に思考を書き出せるwiki
その「wiki」は、どんな「wiki」ですか?
リンクを使って書いた情報を繋げられる
その「リンク」は、どんな「リンク」ですか?
双方向にリンクできる。また、リンク先をリンクしているページも閲覧できる
その「リンク」について、他に何かありますか?
思考を書き出しているときにリンクを曖昧入力補完できる
その「リンク」は、どこにありますか?
scrapbox.ioに格納されている
思考を書き出しているときにリンクを曖昧入力補完できる
この「リンク」は、どのあたりにありますか?
(おっと改行が変に含まれてしまった)
思考の外にある。それを入力補完で引っ張ってきてくれる
その「思考」は、どんな「思考」ですか?
書いている人がその瞬間に脳内で張り巡らせていること、かな。書き出している文字列も思考とみなせるかも
その「思考」について、他に何かありますか?
脳内で張り巡らせているだけだと気づけないことを、書き出して永続化することと入力補完で思考の外から材料を引っ張り出すこととで気づかせてくれる
あなたが価値を感じているのは何ですか?
(話が飛びましたね)
目に見える形で外に出されたものに価値を感じている
テキストとして書き出されたもの
実際に動くprogram・アプリ
模型
その「外」は、どんな「外」ですか?
(改行こみで投げても読み取ってくれるようだ)
jsimport('/api/code/takker/選択範囲をKeichoに尋ねるPopupMenu/script.js');
script.jsimport {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が一行だけの時しか対応できないな
まあ別にいいか
script.jsimport {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;
}
}