recallium 1.2.6 → 2.0.8
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/.claude-plugin/plugin.json +20 -0
- package/LICENSE +56 -0
- package/README.md +36 -52
- package/bin/manifest.json +8 -0
- package/bin/opencode-plugin-manifest.json +8 -0
- package/bin/recallium-hooks.cjs +111 -0
- package/bin/recallium-opencode-plugin.cjs +1 -0
- package/bin/skills/antigravity/capture/SKILL.md +61 -0
- package/bin/skills/antigravity/curate/SKILL.md +64 -0
- package/bin/skills/antigravity/decide/SKILL.md +62 -0
- package/bin/skills/antigravity/design/SKILL.md +61 -0
- package/bin/skills/antigravity/finish/SKILL.md +82 -0
- package/bin/skills/antigravity/handoff/SKILL.md +63 -0
- package/bin/skills/antigravity/investigate/SKILL.md +84 -0
- package/bin/skills/antigravity/project/SKILL.md +60 -0
- package/bin/skills/antigravity/recall/SKILL.md +107 -0
- package/bin/skills/antigravity/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/antigravity/recallium-guidance/reference.md +117 -0
- package/bin/skills/antigravity/recallium-tools/SKILL.md +64 -0
- package/bin/skills/antigravity/resume/SKILL.md +64 -0
- package/bin/skills/antigravity/rule/SKILL.md +64 -0
- package/bin/skills/antigravity/start-work/SKILL.md +78 -0
- package/bin/skills/antigravity/team/SKILL.md +57 -0
- package/bin/skills/antigravity/verdict/SKILL.md +63 -0
- package/bin/skills/claude-code/capture/SKILL.md +61 -0
- package/bin/skills/claude-code/curate/SKILL.md +64 -0
- package/bin/skills/claude-code/decide/SKILL.md +62 -0
- package/bin/skills/claude-code/design/SKILL.md +61 -0
- package/bin/skills/claude-code/finish/SKILL.md +82 -0
- package/bin/skills/claude-code/handoff/SKILL.md +63 -0
- package/bin/skills/claude-code/investigate/SKILL.md +84 -0
- package/bin/skills/claude-code/project/SKILL.md +60 -0
- package/bin/skills/claude-code/recall/SKILL.md +107 -0
- package/bin/skills/claude-code/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/claude-code/recallium-guidance/reference.md +117 -0
- package/bin/skills/claude-code/recallium-tools/SKILL.md +64 -0
- package/bin/skills/claude-code/resume/SKILL.md +64 -0
- package/bin/skills/claude-code/rule/SKILL.md +64 -0
- package/bin/skills/claude-code/start-work/SKILL.md +78 -0
- package/bin/skills/claude-code/team/SKILL.md +57 -0
- package/bin/skills/claude-code/verdict/SKILL.md +63 -0
- package/bin/skills/codex/capture/SKILL.md +61 -0
- package/bin/skills/codex/curate/SKILL.md +64 -0
- package/bin/skills/codex/decide/SKILL.md +62 -0
- package/bin/skills/codex/design/SKILL.md +61 -0
- package/bin/skills/codex/finish/SKILL.md +82 -0
- package/bin/skills/codex/handoff/SKILL.md +63 -0
- package/bin/skills/codex/investigate/SKILL.md +84 -0
- package/bin/skills/codex/project/SKILL.md +60 -0
- package/bin/skills/codex/recall/SKILL.md +107 -0
- package/bin/skills/codex/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/codex/recallium-guidance/reference.md +117 -0
- package/bin/skills/codex/recallium-tools/SKILL.md +64 -0
- package/bin/skills/codex/resume/SKILL.md +64 -0
- package/bin/skills/codex/rule/SKILL.md +64 -0
- package/bin/skills/codex/start-work/SKILL.md +78 -0
- package/bin/skills/codex/team/SKILL.md +57 -0
- package/bin/skills/codex/verdict/SKILL.md +63 -0
- package/bin/skills/cursor/capture/SKILL.md +61 -0
- package/bin/skills/cursor/curate/SKILL.md +64 -0
- package/bin/skills/cursor/decide/SKILL.md +62 -0
- package/bin/skills/cursor/design/SKILL.md +61 -0
- package/bin/skills/cursor/finish/SKILL.md +82 -0
- package/bin/skills/cursor/handoff/SKILL.md +63 -0
- package/bin/skills/cursor/investigate/SKILL.md +84 -0
- package/bin/skills/cursor/project/SKILL.md +60 -0
- package/bin/skills/cursor/recall/SKILL.md +107 -0
- package/bin/skills/cursor/recallium-guidance/SKILL.md +141 -0
- package/bin/skills/cursor/recallium-guidance/reference.md +117 -0
- package/bin/skills/cursor/recallium-tools/SKILL.md +64 -0
- package/bin/skills/cursor/resume/SKILL.md +64 -0
- package/bin/skills/cursor/rule/SKILL.md +64 -0
- package/bin/skills/cursor/start-work/SKILL.md +78 -0
- package/bin/skills/cursor/team/SKILL.md +57 -0
- package/bin/skills/cursor/verdict/SKILL.md +63 -0
- package/commands/doctor.md +15 -0
- package/commands/login.md +17 -0
- package/commands/status.md +11 -0
- package/hooks/hooks.json +88 -0
- package/package.json +26 -29
- package/plugin-manifest.json +128 -0
- package/skills/capture/SKILL.md +61 -0
- package/skills/curate/SKILL.md +64 -0
- package/skills/decide/SKILL.md +62 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/finish/SKILL.md +82 -0
- package/skills/handoff/SKILL.md +63 -0
- package/skills/investigate/SKILL.md +84 -0
- package/skills/project/SKILL.md +60 -0
- package/skills/recall/SKILL.md +107 -0
- package/skills/recallium-guidance/SKILL.md +141 -0
- package/skills/recallium-guidance/reference.md +117 -0
- package/skills/recallium-tools/SKILL.md +64 -0
- package/skills/resume/SKILL.md +64 -0
- package/skills/rule/SKILL.md +64 -0
- package/skills/start-work/SKILL.md +78 -0
- package/skills/team/SKILL.md +57 -0
- package/skills/verdict/SKILL.md +63 -0
- package/bin/recallium +0 -2
- package/src/index.js +0 -179
|
@@ -0,0 +1 @@
|
|
|
1
|
+
'use strict';const _0x330289=_0x4d31;(function(_0x599247,_0x113e31){const _0xfe330=_0x4d31,_0x5e7ecf=_0x599247();while(!![]){try{const _0x5a1663=-parseInt(_0xfe330(0x200,'J9gP'))/(-0x2216*-0x1+-0xcdc+-0x1539)*(-parseInt(_0xfe330(0x147,'7Lrg'))/(-0x3*-0x94b+-0x8f9*-0x1+0x83*-0x48))+-parseInt(_0xfe330(0x14a,'B9#9'))/(0x1*0xb92+0x2*0x8f9+-0x1d81)+parseInt(_0xfe330(0xf7,'Etjy'))/(-0x1e98+0x1d71*0x1+0x12b)*(-parseInt(_0xfe330(0x193,'j$@C'))/(0x1351+-0xbd3+0x1*-0x779))+parseInt(_0xfe330(0x1a2,'Lqr*'))/(-0x1185+-0x1ff8+0x3cf*0xd)+-parseInt(_0xfe330(0xbe,'8M]L'))/(-0x1c11+-0xc3d*0x2+-0x1*-0x3492)+-parseInt(_0xfe330(0x15e,'B9#9'))/(-0x1cd3+0x6b*-0x6+0x1f5d)+parseInt(_0xfe330(0x1b8,'@EVe'))/(-0x1bd4+0x1978+0x265);if(_0x5a1663===_0x113e31)break;else _0x5e7ecf['push'](_0x5e7ecf['shift']());}catch(_0x1b9696){_0x5e7ecf['push'](_0x5e7ecf['shift']());}}}(_0x1db8,0x1f*0x160e+-0x2bed8+0x19ca5));var E=Object[_0x330289(0x11a,'AvwP')+_0x330289(0xe8,'8KMG')],J=Object[_0x330289(0x20d,'91k*')+_0x330289(0x1d9,'J9gP')+_0x330289(0x14f,'nSOc')],G=Object[_0x330289(0xe6,'7Lrg')+_0x330289(0x182,'B9#9')+_0x330289(0x212,'b^Ui')],$=Object[_0x330289(0x18e,'CCnA')+'e'][_0x330289(0x11d,'Sdn1')+_0x330289(0x114,'QC$I')],X=(_0x5449a6,_0x61a0c8)=>{for(var _0x39aa03 in _0x61a0c8)E(_0x5449a6,_0x39aa03,{'get':_0x61a0c8[_0x39aa03],'enumerable':!(0x785*-0x1+-0xba2*-0x1+-0x41d)});},Y=(_0x446a35,_0x149daa,_0x41c0b7,_0x3dd48c)=>{const _0x36cb36=_0x330289;if(_0x149daa&&typeof _0x149daa==_0x36cb36(0x136,'nSOc')||typeof _0x149daa==_0x36cb36(0xba,'BgI^')){for(let _0x370407 of G(_0x149daa))!$[_0x36cb36(0x184,'Sdn1')](_0x446a35,_0x370407)&&_0x370407!==_0x41c0b7&&E(_0x446a35,_0x370407,{'get':()=>_0x149daa[_0x370407],'enumerable':!(_0x3dd48c=J(_0x149daa,_0x370407))||_0x3dd48c[_0x36cb36(0x162,'Etjy')+'le']});}return _0x446a35;},Z=_0x78760d=>Y(E({},_0x330289(0x219,'@EVe')+'le',{'value':!(-0xd*0x35+0x12d8+0x1027*-0x1)}),_0x78760d),ue={};X(ue,{'BIN_BASENAME':()=>I,'BRIDGE_MAX_BUFFER_BYTES':()=>v,'DEFAULT_BRIDGE_TIMEOUT_MS':()=>T,'classifySessionBoundary':()=>x,'createPluginState':()=>q,'extractToolFile':()=>M,'normalizeChatMessage':()=>_,'normalizeSessionCompacting':()=>h,'normalizeSessionEnd':()=>y,'normalizeSessionStart':()=>g,'normalizeToolExecuteAfter':()=>m,'recalliumOpenCodePlugin':()=>ce,'resolveBridgeBin':()=>k,'resolveInterpreter':()=>C,'runBridge':()=>w,'sessionIdFromEvent':()=>S}),module[_0x330289(0x13b,'Sdn1')]=Z(ue);var W=require('node:os');function N(_0x408ce4){const _0x33bc07=_0x330289;return _0x408ce4?_0x408ce4[_0x33bc07(0xc9,'Q1y$')+'th']('/')||/^[A-Za-z]:[\\/]/[_0x33bc07(0x16b,'J9gP')](_0x408ce4)||_0x408ce4[_0x33bc07(0x132,'%ZXZ')+'th']('\x5c\x5c')?_0x33bc07(0x1fd,'fB]l'):_0x33bc07(0x213,'B9#9')+_0x33bc07(0x1ad,'4[Bl'):_0x33bc07(0xb6,'uPr(');}function a(_0x1ab9cf){const _0x4bd2af=_0x330289;return typeof _0x1ab9cf==_0x4bd2af(0x101,'b^Ui')&&_0x1ab9cf[_0x4bd2af(0x12e,'Vjr6')]>0x3*0x33d+-0x175*0x3+-0x2ac*0x2?_0x1ab9cf:void(0x439+0x1c7c+-0x20b5*0x1);}function O(_0x5c40d5){const _0x2d6f60=_0x330289;return typeof _0x5c40d5==_0x2d6f60(0x1eb,'PL2C')&&Number[_0x2d6f60(0x1ca,'mBX^')](_0x5c40d5)?_0x5c40d5:void(-0x1a18+-0x1c54+0x366c);}function A(_0x41f0fa){const _0x344b41=_0x330289;return!!_0x41f0fa&&typeof _0x41f0fa==_0x344b41(0x11b,'BgI^')&&!Array[_0x344b41(0x195,'HbWP')](_0x41f0fa);}function M(_0x4d3f30,_0x34493d){const _0x28549b=_0x330289;let _0x53943f=A(_0x34493d?.[_0x28549b(0x209,'BgI^')])?_0x34493d[_0x28549b(0x103,'91k*')]:{},_0x55ae58=a(_0x53943f[_0x28549b(0xac,'4[Bl')])??a(_0x53943f[_0x28549b(0x1d2,'mBX^')])??a(_0x34493d?.[_0x28549b(0xfa,'b0Cw')]);if(!_0x55ae58)return;let _0x321dd2=A(_0x53943f[_0x28549b(0x145,'QC$I')])?_0x53943f[_0x28549b(0xc5,'n2eT')]:_0x53943f,_0x4b6b0a=O(_0x321dd2[_0x28549b(0x1e0,'0vO5')+'s']),_0x348298=O(_0x321dd2[_0x28549b(0xed,'KXoo')])??O(_0x321dd2[_0x28549b(0xb9,'V!u$')+'s']),_0x5bcfd2={'path':_0x55ae58,'path_kind':N(_0x55ae58),'edits':0x1};return(_0x4b6b0a!==void(0x2cd+-0x7d2+0x1*0x505)||_0x348298!==void(0x59*0x44+-0x104*-0x13+-0x2af0))&&(_0x5bcfd2[_0x28549b(0x166,'7Lrg')+_0x28549b(0x1db,'Xrdc')]=(_0x4b6b0a??0xca6+0x13e0+0x2*-0x1043)+(_0x348298??-0x3*0x4c4+0x1c1*0x11+-0xf85)),_0x5bcfd2;}function m(_0x4e8951,_0x3a92a7,_0x1dcef0){const _0x307da0=_0x330289;let _0x111c30=M(_0x3a92a7,_0x1dcef0),_0x4b896f={'kind':_0x307da0(0xa6,'8KMG')+_0x307da0(0x126,'CCnA'),'tool_name':a(_0x3a92a7?.[_0x307da0(0x119,'Xrdc')])??'','files':_0x111c30?[_0x111c30]:[]},_0x5a8dcd=a(_0x3a92a7?.[_0x307da0(0x11c,'8M]L')+'D']);_0x5a8dcd&&(_0x4b896f[_0x307da0(0x13c,'uPr(')+'id']=_0x5a8dcd);let _0x23ac0b=a(_0x4e8951?.[_0x307da0(0x14b,'@EVe')+'y']);return _0x23ac0b&&(_0x4b896f[_0x307da0(0x204,'Lqr*')+_0x307da0(0x1a1,'jsvc')]=_0x23ac0b),_0x4b896f;}function _(_0x5e7142,_0x43886c){const _0x158563=_0x330289;let _0x80b69c={'kind':_0x158563(0x1bd,'T2Hf')},_0x49fc54=a(_0x43886c?.[_0x158563(0x189,'CCnA')+'D']);_0x49fc54&&(_0x80b69c[_0x158563(0x1a9,'Vjr6')+'id']=_0x49fc54);let _0x4900f8=a(_0x5e7142?.[_0x158563(0x19a,'BgI^')+'y']);return _0x4900f8&&(_0x80b69c[_0x158563(0x1b3,'J9gP')+_0x158563(0x1b5,'Lqr*')]=_0x4900f8),_0x80b69c;}function h(_0x26ff3b,_0x2f1bb8){const _0x47ec85=_0x330289;let _0x4aa053={'kind':_0x47ec85(0xdd,'w6U4')+_0x47ec85(0x1fe,'J9gP')},_0x4c5c0b=a(_0x2f1bb8?.[_0x47ec85(0x17c,'8KMG')+'D']);_0x4c5c0b&&(_0x4aa053[_0x47ec85(0x1a9,'Vjr6')+'id']=_0x4c5c0b);let _0x4ce0ae=a(_0x26ff3b?.[_0x47ec85(0x214,'mCCP')+'y']);return _0x4ce0ae&&(_0x4aa053[_0x47ec85(0x154,'0vO5')+_0x47ec85(0xbb,'Sdn1')]=_0x4ce0ae),_0x4aa053;}function g(_0x21ffd8,_0x4ab467){const _0x4bd781=_0x330289;let _0xa26936={'kind':_0x4bd781(0xcd,'B9#9')+_0x4bd781(0xeb,'w6U4')},_0x5b2163=a(_0x4ab467);_0x5b2163&&(_0xa26936[_0x4bd781(0x1c7,'0vO5')+'id']=_0x5b2163);let _0x21c65b=a(_0x21ffd8?.[_0x4bd781(0x10b,'w6U4')+'y']);return _0x21c65b&&(_0xa26936[_0x4bd781(0x18b,'Etjy')+_0x4bd781(0x149,'2VPg')]=_0x21c65b),_0xa26936;}function y(_0x1ee931,_0x45b232){const _0x3a7c7a=_0x330289;let _0x9c24aa={'kind':_0x3a7c7a(0x122,'Q1y$')+_0x3a7c7a(0x16e,'Q1y$')},_0x15e7b9=a(_0x45b232);_0x15e7b9&&(_0x9c24aa[_0x3a7c7a(0x133,'J9gP')+'id']=_0x15e7b9);let _0x225afe=a(_0x1ee931?.[_0x3a7c7a(0x1d5,'KUZd')+'y']);return _0x225afe&&(_0x9c24aa[_0x3a7c7a(0xaf,'V!u$')+_0x3a7c7a(0x1c6,'uPr(')]=_0x225afe),_0x9c24aa;}function x(_0x3c0395){const _0x510d09=_0x330289;if(_0x3c0395===_0x510d09(0x105,'8M]L')+_0x510d09(0x180,'uPr('))return _0x510d09(0xe3,'CCnA');if(_0x3c0395===_0x510d09(0x198,'B9#9')+_0x510d09(0x1e4,'Vjr6')||_0x3c0395===_0x510d09(0x161,'CpB]')+_0x510d09(0x108,'BgI^'))return _0x510d09(0x1de,'b^Ui');}function S(_0x2f899a){const _0x5b94f6=_0x330289;let _0x312b67=A(_0x2f899a?.[_0x5b94f6(0x205,'%ZXZ')+'es'])?_0x2f899a[_0x5b94f6(0x1a7,'R*TR')+'es']:{};return a(_0x312b67[_0x5b94f6(0x113,'nSOc')+'D'])??a(_0x312b67[_0x5b94f6(0x11c,'8M]L')+'d'])??a(_0x312b67[_0x5b94f6(0xc4,'CCnA')+'id']);}var F=require('node:os'),H=require('node:path'),s=require('node:fs'),b=require('node:os'),d=require('node:path'),V=_0x330289(0x191,'uPr(')+_0x330289(0x10a,'4[Bl')+_0x330289(0xbf,'8M]L')+_0x330289(0x102,'Sdn1')+_0x330289(0x1ae,'QC$I')+_0x330289(0xb7,'CCnA'),ge=V+(_0x330289(0xc0,'U^M!')+_0x330289(0x1af,'ZAVI')+_0x330289(0x138,'nSOc')+_0x330289(0x10e,'7Lrg')+_0x330289(0xb3,'w6U4')+_0x330289(0x17a,'Etjy')+_0x330289(0x1e2,'mCCP')+_0x330289(0x107,'jsvc')+_0x330289(0x156,'YP5)')+_0x330289(0xd1,'mBX^')+_0x330289(0x15d,'k00Y')+_0x330289(0x1f9,'fB]l')+_0x330289(0x128,'b^Ui')+_0x330289(0xdf,'F6Op')+_0x330289(0x141,'Lqr*')+_0x330289(0x14c,'HbWP')+_0x330289(0x106,'BgI^')+_0x330289(0x20f,'F6Op')+_0x330289(0x179,'b^Ui')+_0x330289(0xca,'*0hy')+_0x330289(0x1e7,'Vjr6'));function B(_0x43f6c0=process[_0x330289(0xee,'CpB]')],_0x293309=process[_0x330289(0x111,'Sdn1')],_0x251660=(-0x1*-0x1d3+0x369+-0x1*0x53c,b[_0x330289(0x1c4,'j$@C')])()){const _0x3712d2=_0x330289;let _0x38376c=_0x43f6c0[_0x3712d2(0x121,'8M]L')+_0x3712d2(0xf3,'YP5)')]?.[_0x3712d2(0x1e9,'uPr(')]();if(_0x38376c)return _0x38376c;if(_0x293309===_0x3712d2(0xfe,'V!u$')){let _0x400945=_0x43f6c0[_0x3712d2(0x19b,'Etjy')+_0x3712d2(0xa4,'0vO5')]?.[_0x3712d2(0x169,'k00Y')]();return _0x400945?(-0x442*-0x5+0x10d*0x5+-0x1a8b,d[_0x3712d2(0x192,'n2eT')])(_0x400945,_0x3712d2(0x134,'nSOc')+'m'):(0x1bc0+0x9a*0x6+-0x12*0x1be,d[_0x3712d2(0x1d6,'4[Bl')])(_0x251660,_0x3712d2(0x131,'U^M!')+'um');}let _0x2c7c4e=_0x43f6c0[_0x3712d2(0xe4,'ZAVI')+_0x3712d2(0xae,'91k*')]?.[_0x3712d2(0x1d0,'%ZXZ')]();return _0x2c7c4e?(-0x1730+-0x1379+0x2aa9*0x1,d[_0x3712d2(0xb2,'%ZXZ')])(_0x2c7c4e,_0x3712d2(0xa5,'w6U4')+'m'):(-0x162c+-0x3f0+0x1a1c,d[_0x3712d2(0x116,'F6Op')])(_0x251660,_0x3712d2(0x1b2,'b0Cw')+'um');}function _0x1db8(){const _0xff0b44=['fdxcRaePWPxcHmkY','oJnfv007kbW','WQ00fCkd','W7rDWOpdImk3','WOaoW7S','W6NcL8k8mG','u1tcR8oUWOfPWQBdSCo8WQRdSaa','WPbEuW','WOjkW69+W4FcQCoJW4C','BSo9vs8e','omo2W6W','WRiOgCkwW4b7WRHo','W6BdJIy0W684dH5DWQtdPg8','ywLAW6tcVmorENW','W5mvoCknmCk1WRFcVa','W4isma','W7SRzq','WRpcO8o8W4Trq8oUzG','WOjqFSkKWPpdRJRcGa','W74MC8khWRxcJmo3W64','WQJcQCo+W5K','W4BdUCkptq','zCkJwmoOg8oSoSoh','WRjTsalcNaBdPSkv','o8o8W6G','eGpdUCkP','WPupW77cRSkCW6H1bW','WRBdISobaCkWx8kY','o8kpWRBdNmkFzc3cJSoKWRJdQSkGW7a','EgnaW7K','rSkLxe9IyGK','hmkJrdyrWQpdPW','kZldPLu9WQtdU8oP','qSo6tJa','W7jhWPddN8kL','EwLqW6q','gSoKkq','tCk6C2BdT2tdO8k8','eJxdNWj/W6eU','jmkHwmoLkCo5omon','fq54W4zknCk5','hMLCrY11W7BcKa','kJveaW','W6ZdJ8kmWOdcICkdWPqF','WQpdPCoyWQi8WQGBW4e','h8kAyxWWAvNdUa','W44peSkbmmkPWRFcLa','W5FdGHdcPCoTzW','dGrMW5bhm8kLWRC','W6JcJmkHlYSbbSkf','W5qinCkAkG','s8ossmkv','W5TSWP8+','WQZdNmoLhCkrw8k4fa','W5CDimka','eXJdSSkYW4mT','W4zWWOaYpgeQCW','W6vAWOpdImkYWP3cPSon','WQVcQCo5W4q','WRiOe8k5W5fMWQnl','rCkvuu0mAem','WQ1VqHRcJrZdLSkV','WOBdJComomk/','W77dPSksee8','tmkTqq','WOJdKSofoG','lSo9W7W','W77dICkl','W77dJSkBWPRcLmkfWPuU','A14Pja','CCojt8kzxSk3Dfu','W5iEWOK','E2HfW7i','W4CzWO9S','WPpdNSohmSkIvH/dPG','D2HaW6xdUSk0','adNdNZz3W7SHWRC','lcHcgG','W7VdJ8ktWPBcLmkj','fSo4kL7dRgG','c8o4jv3dRN/cVYq','W6ZdVmkAbq','DL4Ii37cLmoIWQa','WOHnWQf1','WQVdI0q3','WOuSW57cMCoRASkDWQG','W5ybkmocW4RcQMq','WRPHWQuoe8kFWOe','pcFdQ0CNW6W','WORdImoTp8k5xrVdMW','W4qeWO1GW5CT','W7ddUSkm','zMLB','eZddHdz7W7fMWPG','WPpdJSoApG','h8oOmW','W78tmG','et7dGJ1YW6aYWPS','WQn8uW','W6ZdRCkgbKjnWPG3','W7nvxW/cLr/dPa','W7rAWPu','W7ldJ8kmWOdcGCklWP8','frJdSmoL','eb7dUCk3W5m6WOBdPa','W59SWPKJnxO6nW','W7ZdVmkn','W4rLoefkct1V','WPyuW6lcQmkMW4n3dq','cslcVt8UWPVcNCkJ','W7eMB8kg','DKSWj3NcVCoI','cwbb','pYFdS20KW6FdJSoP','eXZdT8kQW5G','zmkzW6OWWQzofua','dwbDucfiW6JcTW','WQlcQCo+W5Lrs8o2DW','jSo2W6S','WQhdSSouWQK1WQCgW6S','CmoosCkvxmkVnfq','DvCWjhhcLmo+WPi','dq3dRSkFW4m/WPtdNG','W45Hpq','W5asmCkm','vCoPW6pcNSoLoh/cRa','W5VdQ8kRWRi','WQPTWQG/hSkhWOddGW','W6auvSoqCNVcHCoR','W4hdTCkptSoVW58','mdvgeLKZlG','r8kJvNO','cclcPZK+WPi','eWxdRmk4','WQFcR8o8W49vs8oSAW','mqnLyc7dJCo4WOD/r8oxWQS','hr3dJ20EW4W','WPusW6lcSmkMW79UnW','W4CrWOzLW5yRWQxdNG','WOyuW7u','W4vXWP89','WRrHWR4ZuSkiWOxdNW','bstcVq','WOqeW6ZcUmkVW7K','ltragviTmG','WP4khG','WOTbWOWkn8k5WQq','WOefW6hcV8k3W7v1bG','aJlcPZ0+WPpcHSkS','d2PCqa','hCo/nvpdUW','W4NdTCkntmoVW5i','W4D+WP3dK8k1mmkaWRJdOrWaWQS','WPb8WPtdNCoMn8olWPm','WODFymktW6BdHb9O','ntvzdG','WQLnfCkCheZcGmoqzWeB','WPddJ8onp8kL','WO5Awmo1nsXTW7O','W4ddNXlcRa','c2rFqs0','csJcRtS','FSorBW8YWOldN8oG','W4rCaSkAxIlcI8o1','WRhdN8oVxmkHx8kOdW','W6aovSom','W6hdUdVcJ8owrW','WQldPCoiWRa5WQSCW6S','WQxdPCoj','WR/cMgu','dsJcPY0','W4n2D8oilCkOWQZcHa','omkLt8oIfmoN','nJbofeKZmXO','W41YWPnZnge8oW','W7mpxq','W5FdGHdcO8o2','W7fJqCoxWPW/WRXMEmo9CCks','WQZdI15KbmolW4xcPG','D3raW6tcOConr1O','W4H7WOiMowW','W7FcLh9+WQTKeZy','WRNdLCoVhmkW','WQH6WQ4beCkeWOtdHG','n8kfW6WTWRHA','mCkbW61KWRDts08','yMnAW6pcISokE0W','WQJcQmoMW4Tjq8o8lG','WO5bWRXIW5hcOmoJ','WO5lsSo0ka','W4ilrSk9WOxcRmozW4G','WP5trmo1oq','x8kSyLVdN3RdGCkH','qCkIra','W78lqmowwxy','DSk9AW','WPnwWQPLW5xcTCkMW5e','WQT8WQOSbG','dY7cPZPWW5O','W5/dTCkmrSoTW5z/tG','CmkNzq','W4jUWOimi30SmW','WRRdL8oVfSkSsG','WRBdGvG','jmo9W7VdNG','sgqzh1RcVG','vmkGu2TLErnp','gwbFutXd','c8o9jKVdPZFcTci','WOrjW4G4WOb8WRhdLCoop8k7cW','W59jn1rdeW','Bt/cVCo0','p8k4sCoNhW','BSotW6RcImoCmG','WQZdQ8o4W4vkqCoRlq','WRtdS8ouWQ8MWQew','WPijW6pdQCoX','W4abk8o3W4tcQ3G','cmo/iMpdQNxcVca','omoNW6RdKMdcGa','tdiba3aFW6NdJG','nsFdS0m3W6JdQSo6','W4nHk0nsctyS','WOuSW57cMCoRASkDW5K','fYtcQda5W5tdO8oH','W6/cMCkNi2uldSkx','aclcPtS+WP/cJq','oJnfj1WUna','WQtdVmkWWPjehSkVna','WRXHWRK7eCkFWOBdHa','vmkTnfNdQM/cOZe','eWTWW4bAnCkKWPa','vSk6nKBdJxFdSmk/','WRvPWRm','W4FdGHVcUmoH','dwLsqc5jW73cKW','W6tdGs8+W689krTAWPBdKwS','EJVcUSoMWR9iDmor','W5Syi8oGW5/cPW','cGH7WPaC','lSkEW7CQ','WO5lt8oPktC','WQNcQCo9W49bq8oQ','W6VdP8kAgq','WQBdGuWTc8koW7BcTq','cYxcOZSPWO4','WOuSW57cMCoRASkDWR4','fwraEZ9iW5/cJa','W6K/ymkvWRJdLCo9W64','W5uzWPe','W5SvW7OOWOJcGmo8W4qhW7JdRa','WQqmW67cQ8oosCk6WQi','W4rnemkBqZ7cSSod','W4vKi0ulftCT','o8k0u8oVe8oUmCoN','s8kSzwFdGxVdV8km','WPfGxSo1oq','k8oeagJdJeJcNa','oCo8W7xcM2ZcHLNcUG','CSkSz8odigG','chfvda','WQZdNmoZamkRuCkLlG','W50pkmo9W5NcUW','W4iJeSkdW4hdOYar','FMLhW7dcOCow','eCkaAgCJAgNdKa','W7NdPmkAgLK','WQmojCkKW6/dGqaH','W5XQWPCHjhSznW','WRf6vbVcKaRdVmkv','wZVcQSo0WRPlC8oT','W7STBSkqWQi','zJZcO8oWWRvt','qCk0v3XtDXvk','Ch7cQSo6WRHtE8oX','CuiHnq','CmkNDW','gh1dwZPsW7W','kZ9ybfq1mIS','s8kUwhPGyG','nSkuW60RWRPlsG','W5KFW59GW5C+WQtdPG','jCktW7e2WQi','aW3dTCk1W5n0WPBdKG','WR1MWQ8','WRhdKeSWnSksW4JcPa','DK8WiMm','W5abimo0','gZxdNt4','amo4iY3cKfpdQ8k0qSoSW4a','WOqMW58','vSkJxwS','W6JcTSklW7THWOCyW6aHW51i','BSoFW7tcImoli3tcQW','W6NdTmobgCkNl0JdNW','W7mGB8kr','r8k4sG','EJ3cU8o8WQztDCoQ','WOCvj8oimmkVWRFdKq','cCoHu3TIzHvh','kCksW64BWOLpsGW','jCo8W7BdGwVcLvxdVa','W6/dMmkqWPNcHCkpWO4F','WQhdK04','yeK4mxVdM8oTWPe','brtdPSkYW4qTWOe','W4VdPCkpsSoVW558uW','tCkIrNPXzHnh','ESoOdCk6tCkZymo5y8oyWP3cPmo8','DKiIjhlcLG','W6HDWOFdJmk9WOdcRCks','hmkijgWZjvpdTW','W6xcUmkpW7nPW7igW4W8W7jRfW','uSo6wq','WQ5auHVcNa','zSkSymofign8cG','W5iEWOPKW5W4WQddTG','zSoPW7pcNSon','a8kfy2a3Aq','W7dcJmoOW41jumoU','vmkGEhhdM0VdSSk7','s8kSC3RdU3hdOSkG','W5FdGHVcUG','bmkEBwm','v8oTss0BWQNdGmov','WRz6vbW','eqr7W4rAna','W7jhWPxdGSkKWP0','W5jgbW','zLq/m3BcJW','W4ryd8kbxG','WPXBtW','W6axrmoqs2dcMmoP','WQZdJK8NeCkcW4NcQq','WRyPW4RcJSkgW45x','yem4jdFcMmoJWPS','W7ZdP8kBbL9dWPGk','WQfCWOpcJCkKWOFcU8oA','WO5AtSoOdYzWW5y','zmoXW77dLhZcGXtcUa','W5iEWOSPW5O4WQtdSa','oIVdQq','W6mEvSoxrgdcHmon','kZVdTfy2W6q','dwXduq','msZdS0CHW7NdRmo+','oYHofKK/oa','W6JdVSom','WR7dSmoEWReKWR08W5u','W6NdVSoq','hMrFwa','W4/dNXRcRG','W7qGB8klWRxcMCo0WRW','W6nAWP/dVCkWWP3cOq','W7KvuCobx3/cMmoH','WO5Awmo1nsXTW6W','W4/dUCkp','W4CcWPbJW5WPWRxdIW','W78lqmoktMdcJSoH','kY5pgeGU','WO1nrmoYmZD6W5u','W4rnbSkgEttcR8oV','zSkSymofign8EW','cZnmgvWUkqy','W47dMr3cPa','sbHaW6b0mCk+','dmoIfeJdU3pcVZC','W7ldOSoJh8k6peG','yddcVCoWWQrxAmo9','WRRdGCoPbW','WQldPCoiWRa5WQSCWPO','WOasW7/cTCkX','ac7cUZSPWO7cHSkW','W7S/WRXiW7ulWPhdHa'];_0x1db8=function(){return _0xff0b44;};return _0x1db8();}var ee=process[_0x330289(0xf4,'2VPg')]!==_0x330289(0x115,'j$@C');function te(){const _0x3ca8b2=_0x330289;return typeof process[_0x3ca8b2(0x129,'CpB]')]==_0x3ca8b2(0x158,'KXoo')?process[_0x3ca8b2(0xda,'%ZXZ')]():void(0xbd0+-0xc98+0x64*0x2);}function D(_0x49867f){const _0x1c7160=_0x330289;if(!ee)return!(0x59*-0x35+-0x246d*0x1+0x36da);let _0x4cb9e5;try{_0x4cb9e5=(0x2383+0xf*0x21f+0x4*-0x10d5,s[_0x1c7160(0x143,'AvwP')])(_0x49867f);}catch{return!(-0x550*0x3+-0x4*-0x4+-0x1*-0xfe1);}if(!_0x4cb9e5[_0x1c7160(0x1f5,'[v9N')+_0x1c7160(0x1f7,'Xrdc')]())return!(-0x170a+-0x25da+0x1*0x3ce5);let _0x47d6b9=te();if(_0x47d6b9!==void(-0x587*0x1+0x74b*-0x4+0x22b3)&&_0x4cb9e5[_0x1c7160(0x201,'KUZd')]!==_0x47d6b9)return!(0x55b+-0x26dc+0x2182);if((_0x4cb9e5[_0x1c7160(0xc7,'BgI^')]&-0xf79*-0x1+0x1d5f+-0x2ad9)!==0x1a16+0x43*0x5e+0xe8*-0x36)try{let _0x3d48d8=(0xe3*-0xa+-0x5*0x53b+0x2305,s[_0x1c7160(0x1c3,'b0Cw')])(_0x49867f,s[_0x1c7160(0x176,'Xrdc')+'s'][_0x1c7160(0x12d,'U^M!')]);try{(0x13aa+-0x1572+0x1c8,s[_0x1c7160(0x16a,'T2Hf')+'nc'])(_0x3d48d8,-0x2691+-0x175f+0x3fb0);}finally{(0xb7b*-0x2+-0x1*0x653+0x1d49,s[_0x1c7160(0x1c5,'Sdn1')+'c'])(_0x3d48d8);}}catch{return!(0x2341+-0x1cbe+-0x682);}return!(0x210e+-0x2358+0x24a);}var Se=s[_0x330289(0x211,'4[Bl')+'s'][_0x330289(0xc8,'T2Hf')+'OW']??0x23e5+0xd85+-0x1fa*0x19,be=(0x55+-0xc2f+0xc16)*(0x20c9+-0x5*-0x15b+-0x13aa*0x2)*(0x3*-0x377+-0x230+0x107d),ke=(0x2*-0x173+-0x352+0x738)*(-0x5*0x27d+0x1196+0x1*-0x125),I=_0x330289(0x1c8,'B9#9')+_0x330289(0xfc,'4[Bl')+_0x330289(0x217,'NB]q');function k(_0x2d2023=process[_0x330289(0xe7,'2VPg')],_0x2ce8d3=process[_0x330289(0x172,'8KMG')],_0x40d297=(0xe94+0x1528+0x23bc*-0x1,F[_0x330289(0x118,'4[Bl')])()){const _0x42b11c=_0x330289;let _0x18929f=B(_0x2d2023,_0x2ce8d3,_0x40d297);return D(_0x18929f)?{'ok':!(-0x13*-0x18a+-0x10*-0x1a9+-0x37ce),'home':_0x18929f,'binPath':(0x1e64+-0x1dea+-0x2*0x3d,H[_0x42b11c(0x1b9,'Vjr6')])(_0x18929f,_0x42b11c(0x18a,'KXoo'),I)}:{'ok':!(0x28f*0x1+0x34*0x47+-0x10fa),'reason':_0x42b11c(0x123,'NB]q')+_0x42b11c(0x218,'mBX^'),'detail':_0x18929f+(_0x42b11c(0x150,'mBX^')+_0x42b11c(0x1a4,'KvHT')+_0x42b11c(0x10c,'PL2C')+_0x42b11c(0xd4,'%ZXZ')+_0x42b11c(0x110,'n2eT'))};}function C(_0x45d2a2=process[_0x330289(0x137,'2VPg')]){return _0x45d2a2;}var U=require('node:child_process'),z=require('node:fs'),ne=[_0x330289(0x190,'CpB]')+_0x330289(0x144,'YP5)'),_0x330289(0x1d7,'R*TR')+_0x330289(0x1cf,'mCCP'),_0x330289(0xe0,'Vjr6')+_0x330289(0x160,'J9gP'),_0x330289(0x168,'n2eT'),_0x330289(0x125,'7Lrg')+_0x330289(0x13a,'CpB]'),_0x330289(0x1c1,'7Lrg')+_0x330289(0xef,'%ZXZ')+'it',_0x330289(0x100,'PL2C')+_0x330289(0x1df,'0vO5'),_0x330289(0x1ec,'PL2C')+_0x330289(0x1a5,'T2Hf')],re=new Set(ne);function j(_0x525184){const _0x3d34d1=_0x330289;return typeof _0x525184==_0x3d34d1(0x1f6,'Etjy')&&re[_0x3d34d1(0x1dc,'2VPg')](_0x525184);}var oe=_0x330289(0x152,'F6Op')+_0x330289(0x12f,'k00Y')+_0x330289(0x208,'V!u$')+_0x330289(0xc1,'uPr('),Ae=oe[_0x330289(0x170,'Q1y$')]('__')[_0x330289(0x1b4,'b^Ui')](),T=0xacb*0x2+-0x400+-0xbba,v=(0x88b*0x2+0x178c+-0x1431*0x2)*(-0x11a1+0x160b+0x35*-0x2);function w(_0x11e73b){return new Promise(_0x2fab12=>{const _0x27be5c=_0x4d31;if(!j(_0x11e73b[_0x27be5c(0x185,'n2eT')])){_0x2fab12({'ok':!(0x172e+-0x2*0xa67+0x1*-0x25f),'reason':_0x27be5c(0x207,'NB]q')+_0x27be5c(0x20a,'ZAVI'),'detail':_0x27be5c(0xd8,'AvwP')+_0x27be5c(0x186,'ZAVI')+_0x27be5c(0xec,'BgI^')+String(_0x11e73b[_0x27be5c(0x1ef,'KvHT')])});return;}if(typeof _0x11e73b[_0x27be5c(0x1f2,'QC$I')]!=_0x27be5c(0xd2,'b0Cw')||_0x11e73b[_0x27be5c(0x109,'uPr(')][_0x27be5c(0x16c,'j$@C')]===0x14*-0x18b+-0x1*-0x38b+0x1b51||!(0x6*-0x332+0x7e*-0x23+-0x1*-0x2466,z[_0x27be5c(0xd9,'Vjr6')+'nc'])(_0x11e73b[_0x27be5c(0x1c2,'fB]l')])){_0x2fab12({'ok':!(-0x5a6+-0x2598+0x2b3f),'reason':_0x27be5c(0xe1,'4[Bl')+_0x27be5c(0x11f,'Etjy'),'detail':_0x27be5c(0x19d,'uPr(')+_0x27be5c(0xdb,'2sp#')+_0x27be5c(0x177,'KUZd')+_0x27be5c(0xb5,'V!u$')});return;}if(typeof _0x11e73b[_0x27be5c(0x159,'2VPg')+_0x27be5c(0xf1,'AvwP')]!=_0x27be5c(0xde,'F6Op')||_0x11e73b[_0x27be5c(0x17f,'91k*')+_0x27be5c(0xce,'B9#9')][_0x27be5c(0xa7,'KXoo')]===-0x61c+-0x1*0x1057+-0x7*-0x335){_0x2fab12({'ok':!(-0x1*-0x2099+-0x1c*-0x24+-0x2488),'reason':_0x27be5c(0x15c,'KUZd')+_0x27be5c(0x17b,'91k*'),'detail':_0x27be5c(0x13f,'Etjy')+_0x27be5c(0xea,'KvHT')+_0x27be5c(0xfd,'B9#9')});return;}let _0x818329=Math[_0x27be5c(0x10f,'w6U4')](-0x33f+0x942+-0x602,Math[_0x27be5c(0xdc,'*0hy')](_0x11e73b[_0x27be5c(0x1aa,'mBX^')+'s']??T)),_0x57916a=Math[_0x27be5c(0x1a3,'CCnA')](0x248c+-0xb0d+-0x197e,Math[_0x27be5c(0x130,'Xrdc')](_0x11e73b[_0x27be5c(0x216,'Lqr*')+_0x27be5c(0xf8,'NB]q')]??v)),_0x378cb2=_0x11e73b[_0x27be5c(0x20b,'YP5)')]??U[_0x27be5c(0x20e,'Lqr*')],_0x1e7406=new AbortController(),_0x1ae863=!(-0x2*-0x882+0x207b+-0x317e),_0x2907b0=0x66*0x49+-0x1*0x1b9c+0x9*-0x2a,_0x491669=[],_0x4c3b34=!(0x1*-0x25df+0x2*-0x8db+-0xb1e*-0x5);function _0x8ab130(_0x208fb5){_0x1ae863||(_0x1ae863=!(-0xe*-0x3e+0x825+-0xb89),clearTimeout(_0x5a723d),_0x2fab12(_0x208fb5));}let _0x5a723d=setTimeout(()=>{const _0x3fda82=_0x27be5c;try{_0x489557[_0x3fda82(0x146,'fB]l')](_0x3fda82(0x127,'PL2C'));}catch{}try{_0x1e7406[_0x3fda82(0x135,'ZAVI')]();}catch{}_0x8ab130({'ok':!(0xd40+-0x2c+-0x1*0xd13),'reason':_0x3fda82(0xff,'QC$I')});},_0x818329);_0x5a723d[_0x27be5c(0x19f,'KUZd')]?.();let _0x489557;try{_0x489557=_0x378cb2(_0x11e73b[_0x27be5c(0x196,'nSOc')+_0x27be5c(0x1f8,'Vjr6')],[_0x11e73b[_0x27be5c(0x1f3,'w6U4')],_0x27be5c(0x151,'2VPg')+'r',_0x27be5c(0x18c,'8KMG'),_0x27be5c(0x1bb,'T2Hf'),_0x11e73b[_0x27be5c(0x1b1,'KXoo')]],{'cwd':_0x11e73b[_0x27be5c(0x155,'AvwP')],'env':_0x11e73b[_0x27be5c(0x1e3,'Etjy')],'shell':!(0x4*0x971+0x4c2+-0x2a85),'stdio':[_0x27be5c(0x1e5,'Etjy'),_0x27be5c(0x17e,'Sdn1'),_0x27be5c(0x12c,'QC$I')],'signal':_0x1e7406[_0x27be5c(0x164,'k00Y')],'timeout':_0x818329,'killSignal':_0x27be5c(0xb8,'w6U4'),'windowsHide':!(0x1*0x3d+0x241c+-0x2459)});}catch(_0x2254b4){_0x8ab130({'ok':!(-0x20a7+-0xcba+0x4a*0x9d),'reason':_0x27be5c(0x11e,'ZAVI')+_0x27be5c(0x1fc,'U^M!'),'detail':_0x2254b4 instanceof Error?_0x2254b4[_0x27be5c(0x202,'0vO5')]:String(_0x2254b4)});return;}_0x489557[_0x27be5c(0x19e,'R*TR')](_0x27be5c(0x199,'V!u$'),_0x29c359=>{const _0x4b002a=_0x27be5c;_0x8ab130({'ok':!(0x2021+0x1f41+-0x3f61),'reason':_0x29c359?.[_0x4b002a(0xa9,'2VPg')]===_0x4b002a(0xcc,'n2eT')?_0x4b002a(0xf0,'*0hy'):_0x4b002a(0xf6,'PL2C')+_0x4b002a(0x183,'HbWP'),'detail':_0x29c359?.[_0x4b002a(0xe2,'KvHT')]});}),_0x489557[_0x27be5c(0x117,'CCnA')]?.['on'](_0x27be5c(0xf9,'nSOc'),_0x37c46b=>{const _0x3220ce=_0x27be5c;if(!(_0x4c3b34||_0x1ae863)){if(_0x2907b0+=_0x37c46b[_0x3220ce(0xaa,'BgI^')],_0x2907b0>_0x57916a){_0x4c3b34=!(0xbba+-0x2*-0x88b+0x39a*-0x8);try{_0x489557[_0x3220ce(0x1dd,'[v9N')](_0x3220ce(0x174,'V!u$'));}catch{}try{_0x1e7406[_0x3220ce(0x140,'F6Op')]();}catch{}_0x8ab130({'ok':!(0xea9+0x331*0x3+-0x183b),'reason':_0x3220ce(0x1c9,'k00Y')});return;}_0x491669[_0x3220ce(0xcb,'8KMG')](_0x37c46b);}}),_0x489557[_0x27be5c(0xf2,'b^Ui')](_0x27be5c(0xe5,'CCnA'),_0x4f7e39=>{const _0x52ffa3=_0x27be5c;if(!_0x1ae863){if(_0x4f7e39!==-0x25a8+0x1dfb*-0x1+0x43a3){_0x8ab130({'ok':!(0x13ba*-0x1+0x1ba+0xb*0x1a3),'reason':_0x52ffa3(0x153,'b^Ui')+_0x52ffa3(0x197,'*0hy'),'detail':_0x52ffa3(0x175,'YP5)')+'e\x20'+String(_0x4f7e39)});return;}_0x8ab130({'ok':!(-0x1f3a+0x59*-0x39+0x330b),'stdout':Buffer[_0x52ffa3(0x16f,'YP5)')](_0x491669)[_0x52ffa3(0x194,'PL2C')](_0x52ffa3(0x12a,'Sdn1'))});}});try{_0x489557[_0x27be5c(0xd6,'n2eT')]?.['on'](_0x27be5c(0xbc,'PL2C'),()=>{}),_0x489557[_0x27be5c(0xc3,'[v9N')]?.[_0x27be5c(0x1ab,'mBX^')](_0x11e73b[_0x27be5c(0xb0,'Etjy')+_0x27be5c(0x181,'HbWP')],_0x27be5c(0x203,'Lqr*'));}catch{}});}var ie=0x15b3+-0xff4*-0x2+0x34d3*-0x1;function se(_0x413308,_0x3e9125,_0x209f19){const _0x567d56=_0x330289;if(_0x3e9125)for(_0x413308[_0x567d56(0xbd,'KXoo')](_0x3e9125),_0x413308[_0x567d56(0x1a6,'b^Ui')](_0x3e9125,_0x209f19);_0x413308[_0x567d56(0xab,'Lqr*')]>ie;){let _0xa4e308=_0x413308[_0x567d56(0x1bf,'Vjr6')]()[_0x567d56(0x1e1,'YP5)')]()[_0x567d56(0xc6,'Sdn1')];if(_0xa4e308===void(-0x1*0x1982+-0x27*-0x67+-0x167*-0x7))break;_0x413308[_0x567d56(0x1ea,'0vO5')](_0xa4e308);}}function q(_0x214d54={}){const _0x402ae7=_0x330289;let _0x35b21c=k(process[_0x402ae7(0x1a0,'V!u$')],process[_0x402ae7(0x215,'YP5)')],(-0x33*-0xba+-0x1*0x11d9+-0x1335,W[_0x402ae7(0xa8,'uPr(')])());return{'ctx':_0x214d54,'binPath':_0x35b21c['ok']?_0x35b21c[_0x402ae7(0x187,'KUZd')]:void(-0x9*0x32f+-0x1871+0xd46*0x4),'interpreter':C(),'pendingInjection':new Map(),'seenSessions':new Set()};}function ae(_0x1994bf,_0x46785d,_0x1f0a5b,_0x52432b){const _0x387083=_0x330289;return _0x1994bf?w({'binPath':_0x1994bf,'interpreter':_0x46785d,'kind':_0x1f0a5b,'payloadJson':_0x52432b}):Promise[_0x387083(0x13e,'F6Op')]({'ok':!(0x1027+0x178b*-0x1+-0x1*-0x765),'reason':_0x387083(0x1d4,'%ZXZ')+_0x387083(0x1c0,'PL2C')});}function K(_0x2a6576,_0x65c790){const _0x120213=_0x330289;if(!_0x2a6576||typeof _0x2a6576!=_0x120213(0x13d,'2VPg'))return;let _0x280d1e=_0x2a6576;Array[_0x120213(0x1b7,'*0hy')](_0x280d1e[_0x120213(0x17d,'91k*')])&&_0x280d1e[_0x120213(0x15b,'YP5)')][_0x120213(0x1fa,'[v9N')](_0x65c790);}function ce(_0x5824a9={}){let _0x174dfc=q(_0x5824a9);async function _0x5a93db(_0x24e8d0,_0xbf749){const _0x112c9e=_0x4d31;try{return await ae(_0x174dfc[_0x112c9e(0x1ba,'2VPg')],_0x174dfc[_0x112c9e(0x188,'8KMG')+_0x112c9e(0x20c,'Sdn1')],_0x24e8d0,JSON[_0x112c9e(0x1cd,'jsvc')+'y'](_0xbf749));}catch{return{'ok':!(0x37c+0xa29+-0xda4),'reason':_0x112c9e(0x1bc,'91k*')+_0x112c9e(0x148,'8M]L')};}}return{async 'event'(_0x2f0de7){const _0x52c048=_0x4d31;try{let _0x190e65=x(_0x2f0de7?.[_0x52c048(0x1da,'[v9N')]?.[_0x52c048(0x139,'YP5)')]);if(!_0x190e65)return;let _0x53804e=S(_0x2f0de7?.[_0x52c048(0x1da,'[v9N')]);_0x190e65===_0x52c048(0x1ce,'mBX^')?(_0x53804e&&_0x174dfc[_0x52c048(0x1d1,'*0hy')+_0x52c048(0xd0,'BgI^')][_0x52c048(0x171,'CCnA')](_0x53804e),await _0x5a93db(_0x52c048(0x1f1,'8M]L')+_0x52c048(0x1be,'KUZd'),g(_0x174dfc[_0x52c048(0xe9,'CpB]')],_0x53804e))):(_0x53804e&&(_0x174dfc[_0x52c048(0x167,'7Lrg')+_0x52c048(0x1b0,'4[Bl')][_0x52c048(0xfb,'@EVe')](_0x53804e),_0x174dfc[_0x52c048(0x124,'b0Cw')+_0x52c048(0x104,'NB]q')][_0x52c048(0x1f4,'91k*')](_0x53804e)),await _0x5a93db(_0x52c048(0x1ee,'YP5)')+_0x52c048(0x142,'w6U4'),y(_0x174dfc[_0x52c048(0xd5,'8KMG')],_0x53804e)));}catch{}},async 'tool.execute.after'(_0x44b606,_0x533f74){const _0x29ac6e=_0x4d31;try{let _0x4267d6=_0x44b606?.[_0x29ac6e(0x12b,'*0hy')+'D'];_0x4267d6&&!_0x174dfc[_0x29ac6e(0x18f,'Q1y$')+_0x29ac6e(0x14d,'ZAVI')][_0x29ac6e(0xcf,'2sp#')](_0x4267d6)&&(_0x174dfc[_0x29ac6e(0x178,'CCnA')+_0x29ac6e(0x1f0,'AvwP')][_0x29ac6e(0x1ac,'ZAVI')](_0x4267d6),await _0x5a93db(_0x29ac6e(0x190,'CpB]')+_0x29ac6e(0xe3,'CCnA'),g(_0x174dfc[_0x29ac6e(0xb1,'V!u$')],_0x4267d6))),await _0x5a93db(_0x29ac6e(0x1b6,'V!u$')+_0x29ac6e(0x163,'@EVe'),m(_0x174dfc[_0x29ac6e(0x15f,'T2Hf')],_0x44b606,_0x533f74));}catch{}},async 'chat.message'(_0x45fdd6){const _0x502a47=_0x4d31;try{let _0x3ef123=await _0x5a93db(_0x502a47(0x1ed,'Xrdc'),_(_0x174dfc[_0x502a47(0x206,'Xrdc')],_0x45fdd6));_0x3ef123['ok']&&_0x3ef123[_0x502a47(0x18d,'uPr(')]&&se(_0x174dfc[_0x502a47(0x1e8,'fB]l')+_0x502a47(0x173,'AvwP')],_0x45fdd6?.[_0x502a47(0x1cc,'j$@C')+'D'],_0x3ef123[_0x502a47(0x16d,'KUZd')]);}catch{}},async 'experimental.session.compacting'(_0x33b34b,_0x457faa){const _0x272be0=_0x4d31;try{let _0x5484e9=await _0x5a93db(_0x272be0(0x19c,'BgI^')+_0x272be0(0xb4,'BgI^'),h(_0x174dfc[_0x272be0(0x14e,'2VPg')],_0x33b34b));_0x5484e9['ok']&&_0x5484e9[_0x272be0(0x1d3,'Lqr*')]&&K(_0x457faa,_0x5484e9[_0x272be0(0x1cb,'n2eT')]);}catch{}},async 'experimental.chat.system.transform'(_0x1b5933,_0x4758d1){const _0x58071c=_0x4d31;try{let _0x7ddfaa=_0x1b5933?.[_0x58071c(0x1ff,'Xrdc')+'D'];if(!_0x7ddfaa)return;let _0x5c1ea1=_0x174dfc[_0x58071c(0x210,'Sdn1')+_0x58071c(0x10d,'j$@C')][_0x58071c(0x1fb,'PL2C')](_0x7ddfaa);if(!_0x5c1ea1)return;_0x174dfc[_0x58071c(0x1e6,'[v9N')+_0x58071c(0xd3,'uPr(')][_0x58071c(0xf5,'Sdn1')](_0x7ddfaa),K(_0x4758d1,_0x5c1ea1);}catch{}}};}function _0x4d31(_0x9df08,_0x13295c){_0x9df08=_0x9df08-(0xbb5+0x1f7*-0x3+-0x52c);const _0x11a4d7=_0x1db8();let _0x91418e=_0x11a4d7[_0x9df08];if(_0x4d31['JkhYKY']===undefined){var _0x190c47=function(_0x5f34ec){const _0x2650f9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2d5227='',_0x5ab748='';for(let _0xc9b147=0xe*0x33+0x8a5+0xb6f*-0x1,_0x132674,_0x280bf4,_0x1a228f=0x25e9+0x13f7+-0x39e0;_0x280bf4=_0x5f34ec['charAt'](_0x1a228f++);~_0x280bf4&&(_0x132674=_0xc9b147%(0x12d8+0x1858+0x1596*-0x2)?_0x132674*(0x3*0x33d+-0x175*0x3+-0x518*0x1)+_0x280bf4:_0x280bf4,_0xc9b147++%(0x439+0x1c7c+-0x20b1*0x1))?_0x2d5227+=String['fromCharCode'](-0x1a18+-0x1c54+0x376b&_0x132674>>(-(0x2cd+-0x7d2+0x9*0x8f)*_0xc9b147&0x59*0x44+-0x104*-0x13+-0x2aea)):0xca6+0x13e0+0x2*-0x1043){_0x280bf4=_0x2650f9['indexOf'](_0x280bf4);}for(let _0x5807be=-0x3*0x4c4+0x1c1*0x11+-0xf85,_0x48cd8c=_0x2d5227['length'];_0x5807be<_0x48cd8c;_0x5807be++){_0x5ab748+='%'+('00'+_0x2d5227['charCodeAt'](_0x5807be)['toString'](-0x1*-0x1d3+0x369+-0x1*0x52c))['slice'](-(-0x442*-0x5+0x10d*0x5+-0x1a89));}return decodeURIComponent(_0x5ab748);};const _0x50655f=function(_0x2df29b,_0x22dbd4){let _0x1cf587=[],_0x5b7ffc=0x1bc0+0x9a*0x6+-0x12*0x1be,_0x403081,_0x274600='';_0x2df29b=_0x190c47(_0x2df29b);let _0x2e20d8;for(_0x2e20d8=-0x1730+-0x1379+0x2aa9*0x1;_0x2e20d8<-0x162c+-0x3f0+0x1b1c;_0x2e20d8++){_0x1cf587[_0x2e20d8]=_0x2e20d8;}for(_0x2e20d8=0xbd0+-0xc98+0x64*0x2;_0x2e20d8<0x59*-0x35+-0x246d*0x1+0x37da;_0x2e20d8++){_0x5b7ffc=(_0x5b7ffc+_0x1cf587[_0x2e20d8]+_0x22dbd4['charCodeAt'](_0x2e20d8%_0x22dbd4['length']))%(0x2383+0xf*0x21f+0x5*-0xd44),_0x403081=_0x1cf587[_0x2e20d8],_0x1cf587[_0x2e20d8]=_0x1cf587[_0x5b7ffc],_0x1cf587[_0x5b7ffc]=_0x403081;}_0x2e20d8=-0x550*0x3+-0x4*-0x4+-0x1*-0xfe0,_0x5b7ffc=-0x170a+-0x25da+0x2*0x1e72;for(let _0x35c1ed=-0x587*0x1+0x74b*-0x4+0x22b3;_0x35c1ed<_0x2df29b['length'];_0x35c1ed++){_0x2e20d8=(_0x2e20d8+(0x55b+-0x26dc+0x2182))%(-0xf79*-0x1+0x1d5f+-0x2bd8),_0x5b7ffc=(_0x5b7ffc+_0x1cf587[_0x2e20d8])%(0x1a16+0x43*0x5e+0x109*-0x30),_0x403081=_0x1cf587[_0x2e20d8],_0x1cf587[_0x2e20d8]=_0x1cf587[_0x5b7ffc],_0x1cf587[_0x5b7ffc]=_0x403081,_0x274600+=String['fromCharCode'](_0x2df29b['charCodeAt'](_0x35c1ed)^_0x1cf587[(_0x1cf587[_0x2e20d8]+_0x1cf587[_0x5b7ffc])%(0xe3*-0xa+-0x5*0x53b+0x2405)]);}return _0x274600;};_0x4d31['rUXlqM']=_0x50655f,_0x4d31['hzviFb']={},_0x4d31['JkhYKY']=!![];}const _0x13aa6d=_0x11a4d7[0x13aa+-0x1572+0x1c8],_0x27f87f=_0x9df08+_0x13aa6d,_0x326fa7=_0x4d31['hzviFb'][_0x27f87f];return!_0x326fa7?(_0x4d31['OemNtp']===undefined&&(_0x4d31['OemNtp']=!![]),_0x91418e=_0x4d31['rUXlqM'](_0x91418e,_0x13295c),_0x4d31['hzviFb'][_0x27f87f]=_0x91418e):_0x91418e=_0x326fa7,_0x91418e;}-0xc99+0x21be+-0x1*0x1525&&(module[_0x330289(0x157,'Lqr*')]={'BIN_BASENAME':BIN_BASENAME,'BRIDGE_MAX_BUFFER_BYTES':BRIDGE_MAX_BUFFER_BYTES,'DEFAULT_BRIDGE_TIMEOUT_MS':DEFAULT_BRIDGE_TIMEOUT_MS,'classifySessionBoundary':classifySessionBoundary,'createPluginState':createPluginState,'extractToolFile':extractToolFile,'normalizeChatMessage':normalizeChatMessage,'normalizeSessionCompacting':normalizeSessionCompacting,'normalizeSessionEnd':normalizeSessionEnd,'normalizeSessionStart':normalizeSessionStart,'normalizeToolExecuteAfter':normalizeToolExecuteAfter,'recalliumOpenCodePlugin':recalliumOpenCodePlugin,'resolveBridgeBin':resolveBridgeBin,'resolveInterpreter':resolveInterpreter,'runBridge':runBridge,'sessionIdFromEvent':sessionIdFromEvent});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: capture
|
|
3
|
+
description: Stores one durable why in Recallium - a learning from research or from a user correction, a constraint you hit, an experiment's numbers, a reusable snippet or runbook - behind the value gate, with its files and edges. Use when you found something out that a teammate could not reconstruct from the code and git log alone, or the user corrected you on how the system works; and use it to decide NOT to store when nothing new is being added - zero writes in a turn is valid.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Capture
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
store_memory(content="## Learned: <title>\n**Claim:** ...\n**Evidence:** ...\n**Consequence:** what to do differently",
|
|
12
|
+
project_name="my-api", workstream_slug="auth-hardening",
|
|
13
|
+
memory_type="learning", related_files=["src/auth/token-manager.ts"],
|
|
14
|
+
relationships=[{"target": "<design-uuid it bears on>", "type": "related"}])
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Why
|
|
18
|
+
|
|
19
|
+
Two questions get confused, so separate them. **Cadence** asks when a real
|
|
20
|
+
finding is written: one memory per finding as it lands, never batched. **The
|
|
21
|
+
value gate** asks whether there is a finding at all: what NEW durable
|
|
22
|
+
information does this add beyond the workstream already loaded? If none, skip.
|
|
23
|
+
A second copy of the same state competes with the first in every future search,
|
|
24
|
+
so storing it twice makes the original harder to find.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. Gate it. Restated state, anything reproducible from a command, a paraphrase
|
|
29
|
+
of the diff, what you are about to do next: not a memory. The last one is
|
|
30
|
+
`set_working_state`.
|
|
31
|
+
2. Type, first match wins: chose X over Y -> `decision` (`decide`) | imposed
|
|
32
|
+
bound -> `constraint` | ran a method, have numbers -> `experiment` | defect
|
|
33
|
+
-> `bugfix` (`investigate`) | architecture -> `design` (`design`) | reusable
|
|
34
|
+
code or command -> `code-snippet` | how to operate or roll back -> `runbook`
|
|
35
|
+
| durable claim about behaviour, incl. a user correction -> `learning` |
|
|
36
|
+
else -> `note`. `task`, `rule`, `verdict` have their own tools.
|
|
37
|
+
3. **Gate:** `workstream_slug` is mandatory; none yet -> `start-work`.
|
|
38
|
+
4. Search the workstream for what this builds on, replaces, bounds or
|
|
39
|
+
contradicts; attach those UUIDs. `supersedes` means the target is now WRONG.
|
|
40
|
+
`expand_memories` a hit before you cite it: an edge to a memory you have
|
|
41
|
+
not read is a guess.
|
|
42
|
+
5. `related_files`: every file read or written. In a chat with no repository,
|
|
43
|
+
leave it empty; never invent paths.
|
|
44
|
+
6. Read the store response: "unanchored" -> repair now with `modify_memory`;
|
|
45
|
+
a suggested file or edge -> take it.
|
|
46
|
+
7. `importance_score` 0.9 / 0.7 / 0.5 / 0.3, auto-scored if omitted.
|
|
47
|
+
|
|
48
|
+
## Anti-patterns
|
|
49
|
+
|
|
50
|
+
WRONG: a code-related memory with empty `related_files`.
|
|
51
|
+
RIGHT: every file touched, so `search_memories(file_path=...)` finds it later.
|
|
52
|
+
|
|
53
|
+
## Checklist
|
|
54
|
+
|
|
55
|
+
- [ ] Value gate applied; could this have been zero writes?
|
|
56
|
+
- [ ] Canonical type, slug, files, at least one edge
|
|
57
|
+
- [ ] Store response read; anchor and suggestions acted on
|
|
58
|
+
|
|
59
|
+
## See also
|
|
60
|
+
|
|
61
|
+
`investigate`, `finish` (the checkpoint half), `decide`, `design`, `curate`, `rule`.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: curate
|
|
3
|
+
description: Corrects, retires, or closes what Recallium already holds - a wrong memory superseded, a duplicate or mistaken memory inactivated, a stale task inactivated, a workstream marked shipped or abandoned when the effort ends. Use when the user says "that's wrong", "forget that", "we dropped that approach", when a PR merges or a branch is abandoned, or when a search returns two memories saying the same thing; never delete, and store nothing new unless the correction itself is a finding.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Curate
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
expand_memories(memory_ids=["<uuid>"]) # read before touching
|
|
12
|
+
modify_memory(memory_id="<uuid>", action="update", content="...", related_files=[...])
|
|
13
|
+
modify_memory(memory_id="<uuid>", action="inactivate", reason="duplicate of <uuid>")
|
|
14
|
+
modify_memory(memory_id="<workstream-uuid>", action="update", status="shipped") # or "abandoned"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
A content edit gives the memory a new id; use the id the response names.
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
The value gate has two halves. Storing only new durable information is one; keeping
|
|
22
|
+
what is stored true is the other. A wrong memory that stays visible is worse than
|
|
23
|
+
none: the next agent acts on it. A duplicate competes with the original in every
|
|
24
|
+
future search, so cleanup restores findability the gate was protecting. Nothing is
|
|
25
|
+
ever deleted: `inactivate` keeps the row for undo, `supersedes` keeps the chain,
|
|
26
|
+
and an abandoned workstream is information about a dead end.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. `expand_memories` the target first; judge what it says.
|
|
31
|
+
2. Pick the operation by what is wrong:
|
|
32
|
+
- factually wrong, but the shape is right -> `modify_memory(action="update")`
|
|
33
|
+
with new `content`; additive for `tags`, `related_files`, `relationships`.
|
|
34
|
+
- superseded by a better decision, design, learning or runbook -> a NEW
|
|
35
|
+
memory with a `supersedes` edge; the old one drops out of search and
|
|
36
|
+
stays in the chain. **Gate:** never supersede `progress`.
|
|
37
|
+
- duplicate or mistaken -> `modify_memory(action="inactivate", reason=...)`.
|
|
38
|
+
`reason` is required. `reactivate` undoes it.
|
|
39
|
+
- unanchored -> `modify_memory(..., workstream_slug=...)`.
|
|
40
|
+
3. Effort over: `modify_memory(memory_id="<workstream-uuid>", action="update",
|
|
41
|
+
status="shipped")` on merge, `"abandoned"` on a dead end. Close its tasks:
|
|
42
|
+
`update_task(status="completed")` for done, `update_task(status="inactive",
|
|
43
|
+
reason=...)` for stale or duplicate; `task_id` takes a list.
|
|
44
|
+
4. A user correction is a `rule` (preference) or a `learning` (fact); either
|
|
45
|
+
may also mean a wrong memory to fix here.
|
|
46
|
+
|
|
47
|
+
## Anti-patterns
|
|
48
|
+
|
|
49
|
+
WRONG: editing a decision in place when the choice changed.
|
|
50
|
+
RIGHT: a new decision with `supersedes`; the chain is the history.
|
|
51
|
+
|
|
52
|
+
WRONG: leaving a shipped effort `active`.
|
|
53
|
+
RIGHT: status `shipped` at merge; the roster stays honest.
|
|
54
|
+
|
|
55
|
+
## Checklist
|
|
56
|
+
|
|
57
|
+
- [ ] Target expanded before any change
|
|
58
|
+
- [ ] Right operation: update, supersede, inactivate, re-anchor
|
|
59
|
+
- [ ] Nothing deleted; every inactivation has a reason
|
|
60
|
+
- [ ] Workstream status and its tasks closed when the effort ended
|
|
61
|
+
|
|
62
|
+
## See also
|
|
63
|
+
|
|
64
|
+
`capture`, `decide`, `finish`, `rule`, `recall`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decide
|
|
3
|
+
description: "Compare implementation alternatives and recommend a choice with its rationale. Use when the user asks which option to choose, including a small or previously settled choice; the workflow determines whether new reasoning or storage is needed. Use design to form an architecture or approach, and recall to retrieve an earlier decision without reconsidering it."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Decide
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
r = start_thinking(goal="Choose the auth strategy for the mobile app",
|
|
12
|
+
project_name="my-api", workstream_slug="auth-hardening")
|
|
13
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="hypothesis")
|
|
14
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="reasoning")
|
|
15
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="conclusion")
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Why
|
|
19
|
+
|
|
20
|
+
A `conclusion` thought auto-stores a `decision` memory, born anchored to the
|
|
21
|
+
workstream passed at `start_thinking`, so the rationale is captured with the
|
|
22
|
+
choice instead of reconstructed from the diff later. The sequence is the audit
|
|
23
|
+
trail: the rejected options and why they lost are the reusable half. A sequence
|
|
24
|
+
left open stores nothing; the Stop hook will say so.
|
|
25
|
+
|
|
26
|
+
## Workflow
|
|
27
|
+
|
|
28
|
+
1. **Gate:** is there a real alternative? No trade-off -> not a decision; use
|
|
29
|
+
`capture` with the right type, or store nothing.
|
|
30
|
+
2. Retrieve prior decisions and constraints. If an applicable decision already settles the request, explain it and stop without starting a sequence or storing a duplicate. A constraint may have removed an option.
|
|
31
|
+
For a routine choice with no durable project consequence, answer with the relevant trade-off and store nothing. Use a thinking sequence for a new consequential choice.
|
|
32
|
+
3. `start_thinking(goal=..., project_name=..., workstream_slug=...)`.
|
|
33
|
+
**Gate:** pass `workstream_slug` here; the auto-stored decision inherits
|
|
34
|
+
it. The server warns if you omit it; pass it now rather than backfilling.
|
|
35
|
+
4. `add_thought` per step: `observation`, `hypothesis` (the options),
|
|
36
|
+
`question`, `reasoning` (what rules options out), `analysis`, `branch`,
|
|
37
|
+
`conclusion` (closes and stores; nothing can be added afterwards).
|
|
38
|
+
5. The conclusion states Context / Options / Chosen and why / Consequences.
|
|
39
|
+
6. Take its UUID. Edge it to the constraint that bounded it; put it in the
|
|
40
|
+
`Recallium-Memory:` trailer of the commit that implements it (`finish`).
|
|
41
|
+
7. A later, better choice does not edit this one: a new `decision` with
|
|
42
|
+
`supersedes` pointing at it.
|
|
43
|
+
|
|
44
|
+
## Anti-patterns
|
|
45
|
+
|
|
46
|
+
WRONG: `start_thinking` without `workstream_slug`, then backfilling.
|
|
47
|
+
RIGHT: pass the slug at `start_thinking`; the conclusion is born anchored.
|
|
48
|
+
|
|
49
|
+
WRONG: recording only the option you picked.
|
|
50
|
+
RIGHT: the rejected options and why they lost.
|
|
51
|
+
|
|
52
|
+
## Checklist
|
|
53
|
+
|
|
54
|
+
- [ ] A real alternative existed
|
|
55
|
+
- [ ] Prior decisions and constraints searched
|
|
56
|
+
- [ ] `workstream_slug` passed at `start_thinking`
|
|
57
|
+
- [ ] Conclusion names options, choice, rationale, consequences
|
|
58
|
+
- [ ] UUID captured for edges and the commit trailer
|
|
59
|
+
|
|
60
|
+
## See also
|
|
61
|
+
|
|
62
|
+
`recall`, `design`, `capture`, `finish`, `verdict`.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: design
|
|
3
|
+
description: "Form or review an architecture, API, data model, module structure, or implementation approach, using the project's recorded constraints. Use when asked to propose how a system should be organized or built, even before a plan exists. Use decide for choosing between specific alternatives; store a design only when a new durable proposal has formed."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Design
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
store_memory(content="## Design: <title>\n**Problem:** ...\n**Shape:** ...\n**Why this shape:** ...\n**Files it will touch:** ...\n**Open questions:** ...",
|
|
12
|
+
project_name="my-api", workstream_slug="auth-hardening",
|
|
13
|
+
memory_type="design",
|
|
14
|
+
related_files=["src/auth/token.ts", "src/auth/refresh.ts"],
|
|
15
|
+
relationships=[{"target": "<constraint-uuid>", "type": "related"},
|
|
16
|
+
{"target": "<old-design-uuid>", "type": "supersedes"}])
|
|
17
|
+
search_memories(query="<design title>", project_name="my-api", memory_type="verdict")
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Why
|
|
21
|
+
|
|
22
|
+
A design stored before the edits, with the files about to change as
|
|
23
|
+
`related_files`, preserves the rationale the edits will implement. Every file in
|
|
24
|
+
that list becomes a door back to the design: the next agent to open one meets
|
|
25
|
+
the plan before diverging from it. A `.md` brief cannot do this, and the hook
|
|
26
|
+
layer nudges you the moment you write one.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. Form or review the requested design: identify the requirements and constraints, then explain the proposed responsibilities, interfaces, and trade-offs. A design request can begin before any plan exists.
|
|
31
|
+
**Storage gate:** record the shape chosen and why only when it adds a new durable proposal beyond the loaded workstream; a restatement or description of the diff stores nothing.
|
|
32
|
+
2. `recall` first: an earlier design or decision may cover this, and a
|
|
33
|
+
`constraint` may bound it. `expand_memories` them and read them before
|
|
34
|
+
reading the code they describe: a summary line is not the memory. Keep
|
|
35
|
+
their UUIDs.
|
|
36
|
+
3. Store one `design` with `workstream_slug`, `related_files` (every file it
|
|
37
|
+
will touch, not only those touched so far) and edges: `related` to what it
|
|
38
|
+
builds on and to the constraint that bounds it, `supersedes` only if the
|
|
39
|
+
earlier design is now wrong.
|
|
40
|
+
4. Capture the full UUID; cite it in `create_task` and the commit trailer.
|
|
41
|
+
5. Briefing a subagent? Pass that full UUID and the slug in its prompt and tell
|
|
42
|
+
it to `expand_memories` the UUID first. Never a file.
|
|
43
|
+
6. Reviewers judge it with `store_verdict` on the design's UUID (`verdict`).
|
|
44
|
+
Before building on a reviewed design, read its verdicts: a `refute` or
|
|
45
|
+
`revise` means a new `design` with `supersedes`, not an edit in place.
|
|
46
|
+
|
|
47
|
+
## Anti-patterns
|
|
48
|
+
|
|
49
|
+
WRONG: `Write("DESIGN.md", ...)` then start editing.
|
|
50
|
+
RIGHT: `store_memory(memory_type="design", ...)`; the memory is the artifact.
|
|
51
|
+
|
|
52
|
+
## Checklist
|
|
53
|
+
|
|
54
|
+
- [ ] Real design, not a diff summary
|
|
55
|
+
- [ ] Prior designs, decisions, constraints searched, read in full, and edged
|
|
56
|
+
- [ ] Files it will touch listed; full UUID captured
|
|
57
|
+
- [ ] Verdicts read before building on a reviewed design
|
|
58
|
+
|
|
59
|
+
## See also
|
|
60
|
+
|
|
61
|
+
`decide`, `verdict`, `start-work`, `capture`, `curate`, `handoff`.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finish
|
|
3
|
+
description: "Assess or close a piece of work when the user requests completion, a tracked task reaches its endpoint, or a commit needs its checkpoint and memory links. Verify the actual state before recording closure. Completing a routine edit or running a check alone does not trigger this workflow. Already-closed work needs no duplicate checkpoint."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Finish
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
git commit -F <body-file> --trailer "Recallium-Memory: <uuid>, <uuid>" # why-UUIDs only
|
|
12
|
+
|
|
13
|
+
# the commit CLOSES a tracked task → the task close is the checkpoint, no progress:
|
|
14
|
+
update_task(task_id="<uuid>", memory_ids=["<why-uuid>", ...], status="completed")
|
|
15
|
+
|
|
16
|
+
# no task closes → ONE progress carries the SHA back:
|
|
17
|
+
store_memory(content="## Landed: <title>\n**SHA:** <full>\n**What it achieved:** ...\n**Verified by:** ...\n**Next:** ...",
|
|
18
|
+
project_name="my-api", workstream_slug="auth-hardening",
|
|
19
|
+
memory_type="progress", tags=["commit:e436e0a4"],
|
|
20
|
+
related_files=["<files in the commit>"],
|
|
21
|
+
relationships=[{"target": "<why-uuid>", "type": "related"}])
|
|
22
|
+
|
|
23
|
+
set_working_state(project_name="my-api", content="<only what is still open — never the checkpoint>")
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Why
|
|
27
|
+
|
|
28
|
+
`git log` records what changed; Recallium records why. The trailer carries the
|
|
29
|
+
why-UUIDs forward from the commit; the `commit:`-tagged progress carries the SHA
|
|
30
|
+
back, so a blame line reaches the decision and a decision reaches the code.
|
|
31
|
+
Progress is a timeline, not a chain: one memory per state worth resuming from,
|
|
32
|
+
never superseded, never restated. The task link, not a tag, anchors task
|
|
33
|
+
progress — and when a commit closes a task, that link IS the checkpoint:
|
|
34
|
+
a progress memory on top of it says the same thing twice. Working state is
|
|
35
|
+
not a checkpoint either: it holds what is left, never what was just stored.
|
|
36
|
+
|
|
37
|
+
## Workflow
|
|
38
|
+
|
|
39
|
+
1. Verify the requested completion against the code, checks, and recorded scope. If work remains, report it as incomplete; do not mark it shipped or infer abandonment from a failed completion check. Use abandoned only when the user explicitly ends or drops the effort. Already-closed work needs no duplicate checkpoint. If an approval blocks a status change, report the actual unchanged state.
|
|
40
|
+
2. Before committing, the why-memories must exist (see `capture`, `decide`,
|
|
41
|
+
`design`). Missing one? Store it now. Collect the UUIDs.
|
|
42
|
+
3. `git commit --trailer "Recallium-Memory: ..."`. **Gate:** use `--trailer`,
|
|
43
|
+
not hand-typing; one blank line inside the trailer block demotes it to body
|
|
44
|
+
text. Verify with `git interpret-trailers --parse`. Trivial change? Say so
|
|
45
|
+
in the body and skip the trailer. The `prepare-commit-msg` hook from
|
|
46
|
+
`recallium --install-git-hook` self-heals an orphaned trailer where installed.
|
|
47
|
+
4. **Gate — one checkpoint, not two.** Does this commit close a tracked
|
|
48
|
+
task? Then close it in one call, `update_task(task_id=..., memory_ids=[the
|
|
49
|
+
why-UUIDs], status="completed")` (`task_id` takes one UUID or a list), and
|
|
50
|
+
store NO progress: the completed task, linked to the why-memories, is the
|
|
51
|
+
checkpoint. No task closes? Then ONE `progress`: full SHA in content, tag
|
|
52
|
+
`commit:<short-sha>`, `related_files` = `git diff-tree --no-commit-id
|
|
53
|
+
--name-only -r <sha>`, `related` edges to the trailer UUIDs; verification
|
|
54
|
+
evidence lives here. Not a commit? Still one progress if the state changed.
|
|
55
|
+
5. `set_working_state` with ONLY what is left over after that last store or
|
|
56
|
+
task close — what is mid-way, what is next, which writes are pending or
|
|
57
|
+
unknown. Never restate the checkpoint (its SHA, files or evidence): the
|
|
58
|
+
working state is a resume note, not a second copy of the memory.
|
|
59
|
+
|
|
60
|
+
## Anti-patterns
|
|
61
|
+
|
|
62
|
+
WRONG: UUIDs mentioned in the progress memory's prose.
|
|
63
|
+
RIGHT: real `relationships` edges; prose is not traversable.
|
|
64
|
+
|
|
65
|
+
WRONG: `supersedes` on an older progress memory.
|
|
66
|
+
RIGHT: never; an old checkpoint is history, not an error.
|
|
67
|
+
|
|
68
|
+
WRONG: a task closed with `memory_ids` AND a `progress` for the same commit.
|
|
69
|
+
RIGHT: one checkpoint — the task close when a task closes, the progress otherwise.
|
|
70
|
+
|
|
71
|
+
WRONG: `set_working_state` repeating the SHAs and evidence just stored.
|
|
72
|
+
RIGHT: the working state names only what is still open.
|
|
73
|
+
|
|
74
|
+
## Checklist
|
|
75
|
+
|
|
76
|
+
- [ ] Why-memories exist; trailer parse-verified
|
|
77
|
+
- [ ] ONE checkpoint: the task closed with `memory_ids` when a task closes, else one progress (full SHA, `commit:` tag, commit's files, edges)
|
|
78
|
+
- [ ] Working state holds only what is left open — not the checkpoint
|
|
79
|
+
|
|
80
|
+
## See also
|
|
81
|
+
|
|
82
|
+
`capture`, `decide`, `design`, `start-work`, `handoff`.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: handoff
|
|
3
|
+
description: "Preserve a continuation point when unfinished work is explicitly paused, parked, or transferred to another session or agent, or when compaction or /clear is imminent. Use working state for the immediate continuation and a memory for a durable brief. Finishing a routine response or updating working state alone does not trigger this workflow."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Handoff
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
set_working_state(project_name="my-api",
|
|
12
|
+
content="branch / workstream / in flight / parked / next action / open questions")
|
|
13
|
+
|
|
14
|
+
# Subagent brief: a memory, never a file
|
|
15
|
+
store_memory(memory_type="design", content="<the full brief>",
|
|
16
|
+
project_name="my-api", workstream_slug="auth-hardening",
|
|
17
|
+
related_files=[...])
|
|
18
|
+
# then in the subagent prompt: "expand_memories(['<FULL uuid>']) first"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Why
|
|
22
|
+
|
|
23
|
+
Working state is the note to your next turn: temporary, plaintext, overwritten
|
|
24
|
+
on every call, not searchable and not a memory. A brief is the opposite:
|
|
25
|
+
durable, workstream-anchored, surfaced at session start. A `HANDOFF.md` feels
|
|
26
|
+
faster than an MCP round-trip and is permanently lossy: a repo file is invisible
|
|
27
|
+
to the next session unless someone recalls its path, and the hook layer nudges
|
|
28
|
+
you the moment such a file is written.
|
|
29
|
+
|
|
30
|
+
## Workflow
|
|
31
|
+
|
|
32
|
+
1. Confirm an actual pause, compaction, or transfer of unfinished work. A routine scratch update after an edit uses `set_working_state` directly and does not require this workflow.
|
|
33
|
+
For a handoff, immediate continuation context goes in working state; analysis, design, scope, and exclusions the receiver must act on go in a memory.
|
|
34
|
+
2. `set_working_state(project_name=..., content=...)`. **Gate:** the parameter
|
|
35
|
+
is `content`; the call overwrites, so write the whole note. Write it after
|
|
36
|
+
each step that changes "resume here", before compaction or `/clear`, and at
|
|
37
|
+
session end. The Stop hook asks for it when the context is filling.
|
|
38
|
+
3. Shape: branch, workstream slug, in flight, parked, next action, open
|
|
39
|
+
questions.
|
|
40
|
+
4. For a subagent: `store_memory(memory_type="design", ...)` with the slug and
|
|
41
|
+
`related_files`; capture the FULL UUID. **Gate:** prefixes collide and do
|
|
42
|
+
not survive compaction.
|
|
43
|
+
5. In the subagent's prompt, pass that UUID and the slug, and instruct it to
|
|
44
|
+
`expand_memories` it first. Have it hand results back the same way.
|
|
45
|
+
6. Session end: every memory this session has a slug, files and an edge; every
|
|
46
|
+
commit has its trailer and its checkpoint (a `commit:`-tagged progress, or the task it closed); every worked task
|
|
47
|
+
is linked. Then `session_recap` if the user wants a summary.
|
|
48
|
+
|
|
49
|
+
## Anti-patterns
|
|
50
|
+
|
|
51
|
+
WRONG: `Write("HANDOFF.md", brief)` then `Task(prompt="read HANDOFF.md")`.
|
|
52
|
+
RIGHT: `store_memory(...)` then pass the UUID with "expand_memories it first".
|
|
53
|
+
|
|
54
|
+
## Checklist
|
|
55
|
+
|
|
56
|
+
- [ ] Working state written (branch, slug, in flight, next action)
|
|
57
|
+
- [ ] Brief stored as a memory; no `.md` authored
|
|
58
|
+
- [ ] Full UUID passed with an expand-first instruction
|
|
59
|
+
- [ ] Session-end hygiene check done
|
|
60
|
+
|
|
61
|
+
## See also
|
|
62
|
+
|
|
63
|
+
`resume` (the other end), `finish`, `design`, `capture`.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: investigate
|
|
3
|
+
description: Runs a bug report, failing test, or unexplained behaviour to its root cause with Recallium's trail - searches for a prior fix by symptom and by file, reasons through the cause as a thinking sequence when it is not obvious, and stores the root cause as a bugfix BEFORE the fix is written. Use when the user says "this is broken", "why does this fail", pastes a stack trace or error, or a test goes red — even when the cause looks obvious, invoke this and search for the prior fix first; if the cause is already stored, fix it and store nothing new. Applies to code you wrote this session, uncommitted or not — fresh code is where a standing ruling is most likely to have been missed, and "I know why" is not a reason to skip the search.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Investigate
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
search_memories(query="<the symptom in a sentence>", project_name="my-api",
|
|
12
|
+
file_path="%token-manager.ts%") # by symptom AND by file
|
|
13
|
+
r = start_thinking(goal="Why does refresh fail after 24h", project_name="my-api",
|
|
14
|
+
workstream_slug="auth-hardening") # only when the cause is not obvious
|
|
15
|
+
add_thought(sequence_id=r.sequence_id, thought="...", thought_type="conclusion")
|
|
16
|
+
store_memory(memory_type="bugfix", content="## Fixed: <title>\n**Problem:** ...\n**Root cause:** ...\n**Solution:** ...\n**Testing:** ...", ...)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
Debugging is the most frequent moment a coding agent has, and it is where memory
|
|
22
|
+
pays most: a bug that looks new is often one that was fixed before, in a file a
|
|
23
|
+
teammate touched, for a reason a stored bugfix already names. The root cause is stored before the fix because the fix
|
|
24
|
+
rewrites the evidence: once the code changes, the diagnosis can only be
|
|
25
|
+
reconstructed from the diff, which is the failure this whole system exists to
|
|
26
|
+
prevent.
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. **Gate:** `recall` first, by symptom and by `file_path`. A prior `bugfix`
|
|
31
|
+
or `constraint` may already explain it. If it does, apply it and skip to
|
|
32
|
+
`finish`; a second copy of a stored cause is noise.
|
|
33
|
+
`expand_memories` the hits and read them before reading code: the
|
|
34
|
+
`design` says how the thing is meant to behave, the `bugfix` what broke
|
|
35
|
+
before. A summary line is not the memory.
|
|
36
|
+
Search a third time by the thing the failing test asserts — a key
|
|
37
|
+
binding, a path, a flag, a constant — not only the symptom. If a hit says
|
|
38
|
+
the current behaviour was a deliberate ruling, the fix must honour the
|
|
39
|
+
ruling, and that reversal is a `bugfix` however small the code change.
|
|
40
|
+
A batch of failures is triaged, not skipped: routine ones store nothing;
|
|
41
|
+
any fix that reverses a choice you made earlier this session, or that an
|
|
42
|
+
existing test's comment predicted, gets its own `bugfix`.
|
|
43
|
+
2. Reproduce and narrow. Cause obvious? Go to step 4. Not obvious? Open a
|
|
44
|
+
thinking sequence with `workstream_slug`; `observation` for facts,
|
|
45
|
+
`hypothesis` per candidate cause, `reasoning` for what rules each out,
|
|
46
|
+
`conclusion` when one stands (it auto-stores a `decision`).
|
|
47
|
+
3. Long investigation? `set_working_state` with what was ruled out so far.
|
|
48
|
+
4. **Gate:** store the `bugfix` with the root cause BEFORE editing: Problem,
|
|
49
|
+
Root cause, Solution and why this approach, Testing; `related_files` where
|
|
50
|
+
the defect lived; a `related` edge to the design it exposed a gap in.
|
|
51
|
+
**Quota warning or not.** A store that comes back refused is reported as
|
|
52
|
+
refused; a store never attempted because a warning made it look
|
|
53
|
+
pointless is the anti-pattern below.
|
|
54
|
+
5. Fix, verify, then `finish`: the bugfix UUID goes in the commit trailer.
|
|
55
|
+
6. An imposed limit is a `constraint`; a claim about behaviour is a `learning`.
|
|
56
|
+
|
|
57
|
+
## Anti-patterns
|
|
58
|
+
|
|
59
|
+
WRONG: the search returns the design of the feature; the code is read first
|
|
60
|
+
to find out how it is meant to behave.
|
|
61
|
+
RIGHT: `expand_memories` the design; the code is opened to confirm it, or to
|
|
62
|
+
find where it departs from it.
|
|
63
|
+
|
|
64
|
+
WRONG: editing until the test passes, then writing "fixed X" as the memory.
|
|
65
|
+
RIGHT: the root cause stored first; the memory says why it broke, not that it passes.
|
|
66
|
+
|
|
67
|
+
WRONG: "these are my own red tests from an hour ago, I know the causes" — fixing
|
|
68
|
+
all eight inline, storing nothing, and only an old test's comment catching the
|
|
69
|
+
ruling you reversed.
|
|
70
|
+
RIGHT: the same eight triaged; seven store nothing; the one that reversed a
|
|
71
|
+
ruling is a `bugfix` stored before its edit, quota warning or not.
|
|
72
|
+
|
|
73
|
+
## Checklist
|
|
74
|
+
|
|
75
|
+
- [ ] Searched by symptom, by file, and by what the failing test asserts
|
|
76
|
+
- [ ] Hits expanded and read before any source file was opened
|
|
77
|
+
- [ ] A batch triaged: every reversal of a ruling or of your own earlier choice has its own bugfix
|
|
78
|
+
- [ ] Thinking sequence concluded, or never opened
|
|
79
|
+
- [ ] Root cause stored before the fix, with files and an edge
|
|
80
|
+
- [ ] Bugfix UUID in the commit trailer
|
|
81
|
+
|
|
82
|
+
## See also
|
|
83
|
+
|
|
84
|
+
`recall`, `decide`, `capture`, `finish`, `handoff`.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: project
|
|
3
|
+
description: Creates, inspects, retires, or links Recallium projects - the metadata containers that scope memories - and keeps project administration out of memories. Use when the user says "set up a project for this repo", "which projects do we have", "link this repo to the API project", "unlink those", "retire that old project", "restore it", or when a summon reports an unknown project; goals, roadmaps and decisions never go on a project, they are memories under a workstream.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Project
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
list_projects(include_inactive=False) # paginated; True shows retired ones
|
|
12
|
+
get_project(project_name="my-api") # name, UUID, description, counts, status, links
|
|
13
|
+
create_project(project_name="my-api", description="...") # idempotent: an existing project is returned unchanged
|
|
14
|
+
update_project(project_name="my-api", description="...") # or status="inactive" (+ reason) / status="active"
|
|
15
|
+
link_projects(project_name="my-api", target_project_name="my-web", relationship="sibling")
|
|
16
|
+
unlink_projects(project_name="my-api", target_project_name="my-web")
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Why
|
|
20
|
+
|
|
21
|
+
A project is grouping and scope, nothing more: a kebab-case name, a one-line
|
|
22
|
+
description, a lifecycle status, and links. Everything that describes the work
|
|
23
|
+
(goals, roadmap, decisions, learnings) is a memory under a workstream, where
|
|
24
|
+
search finds it; a project holds no document. A link is search visibility:
|
|
25
|
+
each project's memories become reachable one hop from the other.
|
|
26
|
+
|
|
27
|
+
## Workflow
|
|
28
|
+
|
|
29
|
+
1. `list_projects` before creating: names are lowercase kebab-case and the
|
|
30
|
+
workspace root is the default name, so the project may exist already.
|
|
31
|
+
2. Create with a description worth reading later. `create_project` never
|
|
32
|
+
modifies an existing project; `update_project` does.
|
|
33
|
+
3. Two repos, one effort? `link_projects` ONCE per pair. `sibling` is
|
|
34
|
+
order-agnostic; `parent` / `child` read source -> target. Re-linking the
|
|
35
|
+
same pair overwrites it. There is no narrower link, so do not link
|
|
36
|
+
projects that should stay separate.
|
|
37
|
+
4. Retire: `update_project(status="inactive", reason=...)`. The row, its
|
|
38
|
+
memories and links are kept; `status="active"` restores. There is no
|
|
39
|
+
delete. A shipped workstream is `curate`'s job, not a project change.
|
|
40
|
+
5. **Gate:** store nothing; administration is not a finding.
|
|
41
|
+
|
|
42
|
+
## Anti-patterns
|
|
43
|
+
|
|
44
|
+
WRONG: `create_project(description="Goals: ... Roadmap: ...")`.
|
|
45
|
+
RIGHT: a `design` or `decision` memory under a workstream; one line here.
|
|
46
|
+
|
|
47
|
+
WRONG: linking two projects so a teammate can see the other's memories.
|
|
48
|
+
RIGHT: links are project-to-project visibility; people are `team`'s matter.
|
|
49
|
+
|
|
50
|
+
## Checklist
|
|
51
|
+
|
|
52
|
+
- [ ] Listed before creating; name is kebab-case
|
|
53
|
+
- [ ] One link per pair; direction right for parent / child
|
|
54
|
+
- [ ] Retired with a reason, never deleted
|
|
55
|
+
- [ ] Nothing stored as a memory
|
|
56
|
+
|
|
57
|
+
## See also
|
|
58
|
+
|
|
59
|
+
`start-work` (the workstream inside it), `resume` (switching project), `curate`,
|
|
60
|
+
`team`, `recallium-tools`.
|