@statechange/council 0.7.0 → 0.9.0
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/dist/commands/discuss.js +4 -0
- package/dist/commands/discuss.js.map +1 -1
- package/dist/core/infographic.js +2 -2
- package/dist/core/infographic.js.map +1 -1
- package/dist/core/topic-enricher.d.ts +9 -0
- package/dist/core/topic-enricher.js +129 -0
- package/dist/core/topic-enricher.js.map +1 -0
- package/dist/electron/ipc-handlers.js +4 -1
- package/dist/electron/ipc-handlers.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist-electron/main.js +565 -498
- package/dist-renderer/assets/{ar-SA-G6X2FPQ2-BgPx2ItE.js → ar-SA-G6X2FPQ2-DJTj94ZY.js} +1 -1
- package/dist-renderer/assets/{arc-uuSymAy6.js → arc-3qXpUeCd.js} +1 -1
- package/dist-renderer/assets/{az-AZ-76LH7QW2-CXxeQJ5N.js → az-AZ-76LH7QW2-1qnzBARG.js} +1 -1
- package/dist-renderer/assets/{bg-BG-XCXSNQG7-B-v6aJJk.js → bg-BG-XCXSNQG7-BIZ5IFAv.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-38ab4fdb-B2x5B_qZ.js → blockDiagram-38ab4fdb-JwSYiuLB.js} +1 -1
- package/dist-renderer/assets/{bn-BD-2XOGV67Q-CmhmKt_C.js → bn-BD-2XOGV67Q-DiYpgYAg.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-3d4e48cf-qv_cNClp.js → c4Diagram-3d4e48cf-DUCtOTzV.js} +1 -1
- package/dist-renderer/assets/{ca-ES-6MX7JW3Y-Cnypgm9v.js → ca-ES-6MX7JW3Y-CV2JFVcm.js} +1 -1
- package/dist-renderer/assets/channel-BFQOS5-A.js +1 -0
- package/dist-renderer/assets/{classDiagram-70f12bd4-DdjxeBAm.js → classDiagram-70f12bd4-DY_je9I9.js} +1 -1
- package/dist-renderer/assets/{classDiagram-v2-f2320105-DjGhSmzz.js → classDiagram-v2-f2320105-Dm2xf0kS.js} +1 -1
- package/dist-renderer/assets/clone-BdgQjyvt.js +1 -0
- package/dist-renderer/assets/{createText-2e5e7dd3-DPeQ2O5Z.js → createText-2e5e7dd3-BU4YlynJ.js} +1 -1
- package/dist-renderer/assets/{cs-CZ-2BRQDIVT-CLjGATXX.js → cs-CZ-2BRQDIVT-DgefxJv2.js} +1 -1
- package/dist-renderer/assets/{da-DK-5WZEPLOC-D5L0qoxT.js → da-DK-5WZEPLOC-CQeMoU_Y.js} +1 -1
- package/dist-renderer/assets/{de-DE-XR44H4JA-C32FRrv8.js → de-DE-XR44H4JA-Cm7XiExL.js} +1 -1
- package/dist-renderer/assets/{edges-e0da2a9e-C9UtuZtL.js → edges-e0da2a9e-DU4SF3SK.js} +1 -1
- package/dist-renderer/assets/{el-GR-BZB4AONW-DbhHCmA8.js → el-GR-BZB4AONW-BKDtOlnf.js} +1 -1
- package/dist-renderer/assets/{erDiagram-9861fffd-BkLC6VUM.js → erDiagram-9861fffd-D_cCijmv.js} +1 -1
- package/dist-renderer/assets/{es-ES-U4NZUMDT-DXQY7ys3.js → es-ES-U4NZUMDT-Blb_L7K-.js} +1 -1
- package/dist-renderer/assets/{eu-ES-A7QVB2H4-B4VgVqIF.js → eu-ES-A7QVB2H4-BZJBLMeO.js} +1 -1
- package/dist-renderer/assets/{fa-IR-HGAKTJCU-elHgBamS.js → fa-IR-HGAKTJCU-C8gu07sI.js} +1 -1
- package/dist-renderer/assets/{fi-FI-Z5N7JZ37-BQe_Oc8x.js → fi-FI-Z5N7JZ37-0j8c6s09.js} +1 -1
- package/dist-renderer/assets/{flowDb-956e92f1-DR2fF74n.js → flowDb-956e92f1-BYeD7SW0.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-66a62f08-wDDwHPpp.js → flowDiagram-66a62f08-D_7wXttk.js} +1 -1
- package/dist-renderer/assets/flowDiagram-v2-96b9c2cf-ue4yLZei.js +1 -0
- package/dist-renderer/assets/{flowchart-elk-definition-4a651766-m7cC1ndJ.js → flowchart-elk-definition-4a651766-G1tSg-iY.js} +1 -1
- package/dist-renderer/assets/{fr-FR-RHASNOE6-U8yDW4RB.js → fr-FR-RHASNOE6-_cfaQNNq.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-c361ad54-SpXIeRET.js → ganttDiagram-c361ad54-Dk5lBh7P.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-72cf32ee-CqmKGlMY.js → gitGraphDiagram-72cf32ee-BzJAQtIC.js} +1 -1
- package/dist-renderer/assets/{gl-ES-HMX3MZ6V-ti0GznU7.js → gl-ES-HMX3MZ6V-GM5nrSrW.js} +1 -1
- package/dist-renderer/assets/{graph-KjGTQ8qd.js → graph-C_xi4PaI.js} +1 -1
- package/dist-renderer/assets/{he-IL-6SHJWFNN-M5av5hFk.js → he-IL-6SHJWFNN-DvBtF7-G.js} +1 -1
- package/dist-renderer/assets/{hi-IN-IWLTKZ5I-Ci72nkHu.js → hi-IN-IWLTKZ5I-CNEB0-5K.js} +1 -1
- package/dist-renderer/assets/{hu-HU-A5ZG7DT2-CJZteS36.js → hu-HU-A5ZG7DT2-BmzYfJwp.js} +1 -1
- package/dist-renderer/assets/{id-ID-SAP4L64H-DmDvIS5c.js → id-ID-SAP4L64H-CGCjaOLU.js} +1 -1
- package/dist-renderer/assets/{index-3862675e-CCE1hBgs.js → index-3862675e-C8a4355J.js} +1 -1
- package/dist-renderer/assets/index-CYsh274_.css +1 -0
- package/dist-renderer/assets/index-Cc7m7vZn.js +51 -0
- package/dist-renderer/assets/{index-CsJIZuMr.js → index-x_yLI1Xq.js} +4 -4
- package/dist-renderer/assets/{infoDiagram-f8f76790-CcZfsGA-.js → infoDiagram-f8f76790-BsJdteru.js} +1 -1
- package/dist-renderer/assets/{it-IT-JPQ66NNP-Bzpfv7zO.js → it-IT-JPQ66NNP-vK6cBs4I.js} +1 -1
- package/dist-renderer/assets/{ja-JP-DBVTYXUO-Bybhg0KI.js → ja-JP-DBVTYXUO-oUvELdsq.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-49397b02-D5LB2Wfi.js → journeyDiagram-49397b02-BZcn-joQ.js} +1 -1
- package/dist-renderer/assets/{kaa-6HZHGXH3-n7D3u8lS.js → kaa-6HZHGXH3-39-zh5xR.js} +1 -1
- package/dist-renderer/assets/{kab-KAB-ZGHBKWFO-BsHCeWxt.js → kab-KAB-ZGHBKWFO-DIwwJSlv.js} +1 -1
- package/dist-renderer/assets/{kk-KZ-P5N5QNE5-Dvo1EL3s.js → kk-KZ-P5N5QNE5-jEG0G6v4.js} +1 -1
- package/dist-renderer/assets/{km-KH-HSX4SM5Z-Bo9Koyui.js → km-KH-HSX4SM5Z-f0MtADYu.js} +1 -1
- package/dist-renderer/assets/{ko-KR-MTYHY66A-Dqbq9Ios.js → ko-KR-MTYHY66A-D0sjNbcb.js} +1 -1
- package/dist-renderer/assets/{ku-TR-6OUDTVRD-B_bI20Zq.js → ku-TR-6OUDTVRD-D_uqAOZU.js} +1 -1
- package/dist-renderer/assets/{layout-BMJBnVbc.js → layout-Bho0HnCB.js} +1 -1
- package/dist-renderer/assets/{line-DYvIrKnf.js → line-BvfrpBJA.js} +1 -1
- package/dist-renderer/assets/{linear-CzUW4n8y.js → linear-CzjqC3F_.js} +1 -1
- package/dist-renderer/assets/{lt-LT-XHIRWOB4-DMcSSx20.js → lt-LT-XHIRWOB4-Ct0yC4CT.js} +1 -1
- package/dist-renderer/assets/{lv-LV-5QDEKY6T-WQFa3Exi.js → lv-LV-5QDEKY6T-nkNbPHg0.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-fc14e90a-CbbLnbfT.js → mindmap-definition-fc14e90a-BHot8rEp.js} +1 -1
- package/dist-renderer/assets/{mr-IN-CRQNXWMA-CeiPk7t6.js → mr-IN-CRQNXWMA-B861rik7.js} +1 -1
- package/dist-renderer/assets/{my-MM-5M5IBNSE-9E7W6sP8.js → my-MM-5M5IBNSE-SOXg7PeE.js} +1 -1
- package/dist-renderer/assets/{nb-NO-T6EIAALU-CmEniZIK.js → nb-NO-T6EIAALU-D22gGzt7.js} +1 -1
- package/dist-renderer/assets/{nl-NL-IS3SIHDZ-zXTYcbKu.js → nl-NL-IS3SIHDZ-CJxOBLb1.js} +1 -1
- package/dist-renderer/assets/{nn-NO-6E72VCQL-h3sqNMWN.js → nn-NO-6E72VCQL-FGcbdlO3.js} +1 -1
- package/dist-renderer/assets/{oc-FR-POXYY2M6-DJ0D2dhd.js → oc-FR-POXYY2M6-s7Swo1Cu.js} +1 -1
- package/dist-renderer/assets/{pa-IN-N4M65BXN-DZ6nLqLL.js → pa-IN-N4M65BXN-DFJMREPh.js} +1 -1
- package/dist-renderer/assets/{percentages-BXMCSKIN-C_WTAk1u.js → percentages-BXMCSKIN-BhceqxTM.js} +7 -7
- package/dist-renderer/assets/{pica-41wOwwIp.js → pica-ej4Z4fjh.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-8a3498a8-DbqgEWOz.js → pieDiagram-8a3498a8-CnDnQfd0.js} +1 -1
- package/dist-renderer/assets/{pl-PL-T2D74RX3-TTq9_VVs.js → pl-PL-T2D74RX3-uXVmB6im.js} +1 -1
- package/dist-renderer/assets/{pt-BR-5N22H2LF-D8eWF-rx.js → pt-BR-5N22H2LF-8kdgECeZ.js} +1 -1
- package/dist-renderer/assets/{pt-PT-UZXXM6DQ-Ck4YSJms.js → pt-PT-UZXXM6DQ-D4vr9vo6.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-120e2f19-astysE66.js → quadrantDiagram-120e2f19-DlUESmO2.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-deff3bca-BczvOV-q.js → requirementDiagram-deff3bca-CfOs9jR8.js} +1 -1
- package/dist-renderer/assets/{ro-RO-JPDTUUEW-Cix9Zgf2.js → ro-RO-JPDTUUEW-CztO0tWv.js} +1 -1
- package/dist-renderer/assets/{ru-RU-B4JR7IUQ-DOEAc_qv.js → ru-RU-B4JR7IUQ-aVURliDr.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-04a897e0-BdKNjOGj.js → sankeyDiagram-04a897e0-DRRc8FSN.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-704730f1-DmhSJhf3.js → sequenceDiagram-704730f1-BaswaqQO.js} +1 -1
- package/dist-renderer/assets/{si-LK-N5RQ5JYF-CdpuKOSp.js → si-LK-N5RQ5JYF-B2KWtx6N.js} +1 -1
- package/dist-renderer/assets/{sk-SK-C5VTKIMK-B_9Y1a-J.js → sk-SK-C5VTKIMK-DlRzLxRJ.js} +1 -1
- package/dist-renderer/assets/{sl-SI-NN7IZMDC-6_HfcMn2.js → sl-SI-NN7IZMDC-Ox8yiRTS.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-587899a1--iD3nJ-S.js → stateDiagram-587899a1-DSEEonbL.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-v2-d93cdb3a-D_ikJOMZ.js → stateDiagram-v2-d93cdb3a-C135NgbB.js} +1 -1
- package/dist-renderer/assets/{styles-6aaf32cf-CmNrPQpM.js → styles-6aaf32cf-X5nh1pD3.js} +1 -1
- package/dist-renderer/assets/{styles-9a916d00-DF6mmpc8.js → styles-9a916d00-BCZu272E.js} +1 -1
- package/dist-renderer/assets/{styles-c10674c1-DrNd7u60.js → styles-c10674c1-C5JGHSaS.js} +1 -1
- package/dist-renderer/assets/{subset-shared.chunk-DESKTf4i.js → subset-shared.chunk-CzgdV5hf.js} +1 -1
- package/dist-renderer/assets/{subset-worker.chunk-foHYh0Wd.js → subset-worker.chunk-DfLYxc1O.js} +1 -1
- package/dist-renderer/assets/{sv-SE-XGPEYMSR-CIuCW4P8.js → sv-SE-XGPEYMSR-CizFbLCT.js} +1 -1
- package/dist-renderer/assets/{svgDrawCommon-08f97a94-z7vJpB0X.js → svgDrawCommon-08f97a94-Cv5ZIzzk.js} +1 -1
- package/dist-renderer/assets/{ta-IN-2NMHFXQM-BzAn6f_T.js → ta-IN-2NMHFXQM-B66K2LEN.js} +1 -1
- package/dist-renderer/assets/{th-TH-HPSO5L25-F8UKokOj.js → th-TH-HPSO5L25-DvHt1SBY.js} +1 -1
- package/dist-renderer/assets/{timeline-definition-85554ec2-CqgD9A1Q.js → timeline-definition-85554ec2-C955-u4m.js} +1 -1
- package/dist-renderer/assets/{tr-TR-DEFEU3FU-Blb21beE.js → tr-TR-DEFEU3FU-u0AuqRoD.js} +1 -1
- package/dist-renderer/assets/{uk-UA-QMV73CPH-BNT7k4n6.js → uk-UA-QMV73CPH-IwAiPvJL.js} +1 -1
- package/dist-renderer/assets/{vi-VN-M7AON7JQ-Cfx0gaLT.js → vi-VN-M7AON7JQ-Dh6Aj3f5.js} +1 -1
- package/dist-renderer/assets/{xychartDiagram-e933f94c-FbPSsBHD.js → xychartDiagram-e933f94c-Bst4jMma.js} +1 -1
- package/dist-renderer/assets/{zh-CN-LNUGB5OW-CpiybZS1.js → zh-CN-LNUGB5OW-BVXMa9T3.js} +1 -1
- package/dist-renderer/assets/{zh-HK-E62DVLB3-UIQkTr8J.js → zh-HK-E62DVLB3-DYEIu92z.js} +1 -1
- package/dist-renderer/assets/{zh-TW-RAJ6MFWO-GvyNND72.js → zh-TW-RAJ6MFWO-Dm9oSthu.js} +1 -1
- package/dist-renderer/index.html +2 -2
- package/package.json +1 -1
- package/skills/council-create-councilor/SKILL.md +191 -0
- package/skills/council-discuss-idea/SKILL.md +132 -0
- package/skills/council-install-councilor/SKILL.md +122 -0
- package/dist-renderer/assets/channel-CbR4ut5U.js +0 -1
- package/dist-renderer/assets/clone-CdbunAYL.js +0 -1
- package/dist-renderer/assets/flowDiagram-v2-96b9c2cf-DYxWopzM.js +0 -1
- package/dist-renderer/assets/index-BUIE-P96.js +0 -51
- package/dist-renderer/assets/index-HXjW9ZG3.css +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./percentages-BXMCSKIN-
|
|
1
|
+
import"./percentages-BXMCSKIN-BhceqxTM.js";import"./index-Cc7m7vZn.js";var e={paste:"貼上",pasteAsPlaintext:"",pasteCharts:"貼上圖表",selectAll:"全選",multiSelect:"多重選取",moveCanvas:"移動畫布",cut:"剪下",copy:"複製",copyAsPng:"以 PNG 格式複製",copyAsSvg:"以 SVG 格式複製",copyText:"",copySource:"",convertToCode:"",bringForward:"往上一層移動",sendToBack:"移到最底層",bringToFront:"移到最上層",sendBackward:"往下一層移動",delete:"刪除",copyStyles:"複製樣式",pasteStyles:"套用樣式",stroke:"筆跡顏色",background:"填充顏色",fill:"背景樣式",strokeWidth:"筆跡寬度",strokeStyle:"筆跡線條",strokeStyle_solid:"實線",strokeStyle_dashed:"虛線(較密)",strokeStyle_dotted:"虛線(較疏)",sloppiness:"筆跡風格",opacity:"透明度",textAlign:"文字對齊",edges:"邊角樣式",sharp:"銳角",round:"圓角",arrowheads:"箭嘴",arrowhead_none:"無箭嘴",arrowhead_arrow:"普通箭嘴",arrowhead_bar:"平頭條狀",arrowhead_circle:"",arrowhead_circle_outline:"",arrowhead_triangle:"三角箭嘴",arrowhead_triangle_outline:"",arrowhead_diamond:"",arrowhead_diamond_outline:"",fontSize:"字型大小",fontFamily:"字體",addWatermark:"加入「使用 Excalidraw 製圖」水印",handDrawn:"手繪體",normal:"電腦字體",code:"等寬體",small:"細",medium:"中",large:"大",veryLarge:"勁大",solid:"實心",hachure:"斜線",zigzag:"",crossHatch:"交叉格仔",thin:"幼",bold:"粗",left:"靠左對齊",center:"置中對齊",right:"靠右對齊",extraBold:"勁粗",architect:"手繪風格",artist:"藝術家風格",cartoonist:"卡通風格",fileTitle:"檔案名稱",colorPicker:"",canvasColors:"",canvasBackground:"畫布背景顏色",drawingCanvas:"畫布",layers:"圖層",actions:"動作",language:"🌏 語言",liveCollaboration:"",duplicateSelection:"製作副本",untitled:"未命名的作品",name:"",yourName:"你的名稱",madeWithExcalidraw:"使用 Excalidraw 製圖",group:"建立物件群組",ungroup:"取消物件群組",collaborators:"已連線的協作者",showGrid:"顯示網格",addToLibrary:"加入作品庫",removeFromLibrary:"從作品庫中移除",libraryLoadingMessage:"正在載入作品庫…",libraries:"瀏覽作品庫",loadingScene:"載入畫布中…",align:"物件對齊",alignTop:"水平置頂",alignBottom:"水平置底",alignLeft:"垂直靠左對齊",alignRight:"垂直靠右對齊",centerVertically:"垂直置中",centerHorizontally:"水平置中",distributeHorizontally:"左右等距",distributeVertically:"上下等距",flipHorizontal:"左右反轉",flipVertical:"上下反轉",viewMode:"唯讀模式",share:"",showStroke:"",showBackground:"",toggleTheme:"",personalLib:"",excalidrawLib:"",decreaseFontSize:"",increaseFontSize:"",unbindText:"",bindText:"",createContainerFromText:"",link:{edit:"",editEmbed:"",create:"",createEmbed:"",label:"",labelEmbed:"",empty:""},lineEditor:{edit:"",exit:""},elementLock:{lock:"",unlock:"",lockAll:"",unlockAll:""},statusPublished:"",sidebarLock:"",selectAllElementsInFrame:"",removeAllElementsFromFrame:"",eyeDropper:"",textToDiagram:"",prompt:""},u={noItems:"",hint_emptyLibrary:"",hint_emptyPrivateLibrary:""},a={clearReset:"清空畫布",exportJSON:"",exportImage:"",export:"",copyToClipboard:"",save:"",saveAs:"",load:"",getShareableLink:"",close:"",selectLanguage:"",scrollBackToContent:"",zoomIn:"",zoomOut:"",resetZoom:"",menu:"",done:"",edit:"",undo:"",redo:"",resetLibrary:"",createNewRoom:"",fullScreen:"",darkMode:"",lightMode:"",zenMode:"",objectsSnapMode:"",exitZenMode:"",cancel:"",clear:"",remove:"",embed:"",publishLibrary:"",submit:"",confirm:"",embeddableInteractionButton:""},o={clearReset:"【‼️ 警告 ‼️ 無法復原的動作】你確定要清空呢塊畫布嗎?",couldNotCreateShareableLink:"",couldNotCreateShareableLinkTooBig:"",couldNotLoadInvalidFile:"",importBackendFailed:"",cannotExportEmptyCanvas:"無嘢可以匯出喎~畫吓嘢先?",couldNotCopyToClipboard:"",decryptFailed:"",uploadedSecurly:"",loadSceneOverridePrompt:"",collabStopOverridePrompt:"",errorAddingToLibrary:"",errorRemovingFromLibrary:"",confirmAddLibrary:"",imageDoesNotContainScene:"",cannotRestoreFromImage:"",invalidSceneUrl:"",resetLibrary:"",removeItemsFromsLibrary:"",invalidEncryptionKey:"",collabOfflineWarning:""},r={unsupportedFileType:"",imageInsertError:"",fileTooBig:"",svgImageInsertError:"",failedToFetchImage:"",invalidSVGString:"",cannotResolveCollabServer:"",importLibraryError:"",collabSaveFailed:"",collabSaveFailed_sizeExceeded:"",imageToolNotSupported:"",brave_measure_text_error:{line1:"",line2:"",line3:"",line4:""},libraryElementTypeError:{embeddable:"",iframe:"",image:""},asyncPasteFailedOnRead:"",asyncPasteFailedOnParse:"",copyToSystemClipboardFailed:""},t={selection:"",image:"",rectangle:"",diamond:"",ellipse:"",arrow:"",line:"",freedraw:"",text:"",library:"",lock:"",penMode:"",link:"",eraser:"",frame:"",magicframe:"",embeddable:"",laser:"",hand:"",extraTools:"",mermaidToExcalidraw:"",magicSettings:""},i={canvasActions:"畫布動作",selectedShapeActions:"",shapes:""},l={canvasPanning:"",linearElement:"",freeDraw:"",text:"",embeddable:"",text_selected:"",text_editing:"",linearElementMulti:"",lockAngle:"",resize:"",resizeImage:"",rotate:"",lineEditor_info:"",lineEditor_pointSelected:"",lineEditor_nothingSelected:"",placeImage:"",publishLibrary:"",bindTextToElement:"",deepBoxSelect:"",eraserRevert:"",firefox_clipboard_write:"",disableSnapping:""},n={cannotShowPreview:"無法顯示預覽",canvasTooBig:"塊畫布太大啦,縮細啲先啦?",canvasTooBigTip:""},s={headingMain:"",clearCanvasMessage:"如果重新整理頁面都係睇唔到,你可以<button>清空畫布</button>",clearCanvasCaveat:"(注意:呢個動作會直接丟棄你嘅作品,並且無法復原)",trackedToSentry:"",openIssueMessage:"",sceneContent:""},d={desc_intro:"",desc_privacy:"",button_startSession:"",button_stopSession:"",desc_inProgressIntro:"",desc_shareLink:"",desc_exitSession:"",shareTitle:""},c={title:""},F={disk_title:"",disk_details:"",disk_button:"",link_title:"",link_details:"",link_button:"",excalidrawplus_description:"",excalidrawplus_button:"",excalidrawplus_exportError:""},m={blog:"",click:"",deepSelect:"",deepBoxSelect:"",curvedArrow:"",curvedLine:"",documentation:"",doubleClick:"",drag:"",editor:"",editLineArrowPoints:"",editText:"",github:"",howto:"",or:"",preventBinding:"",tools:"",shortcuts:"",textFinish:"",textNewLine:"",title:"",view:"",zoomToFit:"",zoomToSelection:"",toggleElementLock:"",movePageUpDown:"",movePageLeftRight:""},p={title:""},E={title:"",itemName:"",authorName:"",githubUsername:"",twitterUsername:"",libraryName:"",libraryDesc:"",website:"",placeholder:{authorName:"",libraryName:"",libraryDesc:"",githubHandle:"",twitterHandle:"",website:""},errors:{required:"",website:""},noteDescription:"",noteGuidelines:"",noteLicense:"",noteItems:"",atleastOneLibItem:"",republishWarning:""},g={title:"",content:""},D={resetLibrary:"",removeItemsFromLib:""},b={header:"",label:{withBackground:"",onlySelected:"",darkMode:"",embedScene:"",scale:"",padding:""},tooltip:{embedScene:""},title:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""},button:{exportToPng:"",exportToSvg:"",copyPngToClipboard:""}},C={tooltip:"",link:""},A={angle:"",element:"",elements:"",height:"",scene:"",selected:"",storage:"",title:"",total:"",version:"",versionCopy:"",versionNotAvailable:"",width:""},B={addedToLibrary:"",copyStyles:"",copyToClipboard:"",copyToClipboardAsPng:"",fileSaved:"",fileSavedToFilename:"",canvas:"畫布",selection:"",pasteAsSingleElement:"",unableToEmbed:"",unrecognizedLinkFormat:""},h={transparent:"",black:"",white:"",red:"",pink:"",grape:"",violet:"",gray:"",blue:"",cyan:"",teal:"",green:"",yellow:"",orange:"",bronze:""},y={app:{center_heading:"",center_heading_plus:"",menuHint:""},defaults:{menuHint:"",center_heading:"",toolbarHint:"",helpHint:""}},v={mostUsedCustomColors:"",colors:"",shades:"",hexCode:"",noShades:""},S={action:{exportToImage:{title:"",button:"",description:""},saveToDisk:{title:"",button:"",description:""},excalidrawPlus:{title:"",button:"",description:""}},modal:{loadFromFile:{title:"",button:"",description:""},shareableLink:{title:"",button:"",description:""}}},w={title:"",button:"",description:"",syntax:"",preview:""},T={labels:e,library:u,buttons:a,alerts:o,errors:r,toolBar:t,headings:i,hints:l,canvasError:n,errorSplash:s,roomDialog:d,errorDialog:c,exportDialog:F,helpDialog:m,clearCanvasDialog:p,publishDialog:E,publishSuccessDialog:g,confirmDialog:D,imageExportDialog:b,encrypted:C,stats:A,toast:B,colors:h,welcomeScreen:y,colorPicker:v,overwriteConfirm:S,mermaid:w};export{o as alerts,a as buttons,n as canvasError,p as clearCanvasDialog,v as colorPicker,h as colors,D as confirmDialog,T as default,C as encrypted,c as errorDialog,s as errorSplash,r as errors,F as exportDialog,i as headings,m as helpDialog,l as hints,b as imageExportDialog,e as labels,u as library,w as mermaid,S as overwriteConfirm,E as publishDialog,g as publishSuccessDialog,d as roomDialog,A as stats,B as toast,t as toolBar,y as welcomeScreen};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"./percentages-BXMCSKIN-
|
|
1
|
+
import"./percentages-BXMCSKIN-BhceqxTM.js";import"./index-Cc7m7vZn.js";var u={paste:"貼上",pasteAsPlaintext:"以純文字貼上",pasteCharts:"貼上圖表",selectAll:"全選",multiSelect:"將物件加入選取範圍",moveCanvas:"移動畫布",cut:"剪下",copy:"複製",copyAsPng:"以PNG格式儲存到剪貼板",copyAsSvg:"以SVG格式複製到剪貼板",copyText:"以文字格式複製至剪貼簿",copySource:"複製來源至剪貼簿",convertToCode:"轉換為程式碼",bringForward:"上移一層",sendToBack:"移到最底層",bringToFront:"置於最頂層",sendBackward:"往後移一層",delete:"刪除",copyStyles:"複製樣式",pasteStyles:"貼上樣式",stroke:"筆畫",background:"背景",fill:"填滿",strokeWidth:"筆跡寬度",strokeStyle:"筆畫樣式",strokeStyle_solid:"實線",strokeStyle_dashed:"虛線",strokeStyle_dotted:"點線",sloppiness:"線條風格",opacity:"透明度",textAlign:"文字對齊",edges:"邊緣",sharp:"尖銳",round:"平滑",arrowheads:"箭頭",arrowhead_none:"無",arrowhead_arrow:"箭頭",arrowhead_bar:"條狀箭頭",arrowhead_circle:"圓形",arrowhead_circle_outline:"圓形(外框)",arrowhead_triangle:"三角形",arrowhead_triangle_outline:"三角形(外框)",arrowhead_diamond:"菱形",arrowhead_diamond_outline:"菱形(外框)",fontSize:"字型大小",fontFamily:"字體集",addWatermark:'加上 "Made with Excalidraw" 浮水印',handDrawn:"手寫",normal:"一般",code:"代碼",small:"小",medium:"中",large:"大",veryLarge:"特大",solid:"實心",hachure:"斜線筆觸",zigzag:"Z字形",crossHatch:"交叉筆觸",thin:"細",bold:"粗",left:"左側",center:"置中",right:"右側",extraBold:"極粗",architect:"精確",artist:"藝術",cartoonist:"卡通",fileTitle:"檔案名稱",colorPicker:"色彩選擇工具",canvasColors:"使用於畫布",canvasBackground:"Canvas 背景",drawingCanvas:"繪圖 canvas",layers:"圖層",actions:"動作",language:"語言",liveCollaboration:"即時協作...",duplicateSelection:"複製",untitled:"無標題",name:"名稱",yourName:"你的名稱",madeWithExcalidraw:"以 Excalidraw 製作",group:"建立群組",ungroup:"取消群組",collaborators:"協作者",showGrid:"顯示格線",addToLibrary:"加入資料庫",removeFromLibrary:"從資料庫中移除",libraryLoadingMessage:"資料庫讀取中…",libraries:"瀏覽資料庫",loadingScene:"場景讀取中…",align:"對齊",alignTop:"對齊頂部",alignBottom:"對齊底部",alignLeft:"對齊左側",alignRight:"對齊右側",centerVertically:"垂直置中",centerHorizontally:"水平置中",distributeHorizontally:"水平分布",distributeVertically:"垂直分布",flipHorizontal:"水平翻轉",flipVertical:"垂直翻轉",viewMode:"檢視模式",share:"共享",showStroke:"顯示線條檢色器",showBackground:"顯示背景檢色器",toggleTheme:"切換主題",personalLib:"個人資料庫",excalidrawLib:"Excalidraw 資料庫",decreaseFontSize:"縮小文字",increaseFontSize:"放大文字",unbindText:"取消綁定文字",bindText:"結合文字至容器",createContainerFromText:"將文字包於容器中",link:{edit:"編輯連結",editEmbed:"編輯連結&嵌入",create:"建立連結",createEmbed:"建立連結&嵌入",label:"連結",labelEmbed:"連結&嵌入",empty:"未設定連結"},lineEditor:{edit:"編輯線條",exit:"結束線條編輯"},elementLock:{lock:"鎖定",unlock:"解鎖",lockAll:"全部鎖定",unlockAll:"全部解鎖"},statusPublished:"已發布",sidebarLock:"側欄維持開啟",selectAllElementsInFrame:"選取框架內的所有元素",removeAllElementsFromFrame:"從框架內移除所有元素",eyeDropper:"從畫布中選取顏色",textToDiagram:"文字轉圖表",prompt:"提示詞"},F={noItems:"尚未加入任何物件...",hint_emptyLibrary:"選取畫布上的物件以加入,或從下方的公開 repository 中安裝資料庫",hint_emptyPrivateLibrary:"選擇畫布上的物件以在此加入"},e={clearReset:"重置 canvas",exportJSON:"匯出至檔案",exportImage:"匯出圖片",export:"儲存至...",copyToClipboard:"複製至剪貼簿",save:"儲存目前檔案",saveAs:"儲存為",load:"開啟",getShareableLink:"取得共享連結",close:"關閉",selectLanguage:"選擇語言",scrollBackToContent:"捲動回到內容",zoomIn:"放大",zoomOut:"縮小",resetZoom:"重設縮放",menu:"選單",done:"完成",edit:"編輯",undo:"復原",redo:"重做",resetLibrary:"重設資料庫",createNewRoom:"建立新協作會議室",fullScreen:"全螢幕",darkMode:"深色模式",lightMode:"淺色模式",zenMode:"專注模式",objectsSnapMode:"吸附至物件",exitZenMode:"離開專注模式",cancel:"取消",clear:"清除",remove:"刪除",embed:"切換嵌入",publishLibrary:"發布",submit:"送出",confirm:"確認",embeddableInteractionButton:"點擊以互動"},E={clearReset:"這將會清除整個 canvas。你確定嗎?",couldNotCreateShareableLink:"無法建立共享連結。",couldNotCreateShareableLinkTooBig:"無法建立共享連結:場景太大",couldNotLoadInvalidFile:"無法讀取失效的檔案。",importBackendFailed:"後端讀取失敗。",cannotExportEmptyCanvas:"無法輸出空白的 canvas。",couldNotCopyToClipboard:"無法複製到剪貼簿",decryptFailed:"無法解密資料。",uploadedSecurly:"上傳已通過 end-to-end 加密,Excalidraw 伺服器和第三方無法皆讀取其內容。",loadSceneOverridePrompt:"讀取外部圖樣將取代目前的內容。是否要繼續?",collabStopOverridePrompt:`停止連線將覆蓋您先前於本機儲存的繪圖進度,是否確認?
|
|
2
2
|
|
|
3
3
|
(如要保留原有的本機繪圖進度,直接關閉瀏覽器分頁即可。)`,errorAddingToLibrary:"無法於此資料庫加入項目",errorRemovingFromLibrary:"無法由此資料庫移除項目",confirmAddLibrary:"這將會將 {{numShapes}} 個圖形加入你的資料庫,你確定嗎?",imageDoesNotContainScene:"此圖檔中未包含場景資料。輸出檔案時是否有包含場景資料?",cannotRestoreFromImage:"無法由此檔案回復場景。",invalidSceneUrl:"無法由提供的 URL 匯入場景。可能是發生異常,或未包含有效的 Excalidraw JSON 資料。",resetLibrary:"這會清除您的資料庫,是否確定?",removeItemsFromsLibrary:"從資料庫刪除 {{count}} 項?",invalidEncryptionKey:"加密鍵必須為22字元。即時協作已停用。",collabOfflineWarning:`沒有可用的網路連線。
|
|
4
4
|
變更無法儲存!`},C={unsupportedFileType:"不支援的檔案類型。",imageInsertError:"無法插入圖片。請稍後再試…",fileTooBig:"檔案過大。可接受的最大尺寸為 {{maxSize}} 。",svgImageInsertError:"無法插入 SVG 圖片。此 SVG 檔案有問題。",failedToFetchImage:"無法獲取圖片。",invalidSVGString:"無效的 SVG。",cannotResolveCollabServer:"無法連結至 collab 伺服器。請重新整理後再試一次。",importLibraryError:"無法載入資料庫",collabSaveFailed:"無法儲存至後端資料庫。若此問題持續發生,請將檔案儲存於本機以確保資料不會遺失。",collabSaveFailed_sizeExceeded:"無法儲存至後端資料庫,可能的原因為畫布尺寸過大。請將檔案儲存於本機以確保資料不會遺失。",imageToolNotSupported:"圖片已停用",brave_measure_text_error:{line1:"看起來您開啟了 Brave 瀏覽器的 <bold>Aggressively Block Fingerprinting</bold> 設定。",line2:"這可能造成您畫布中 <bold>文字元素</bold> 的異常。",line3:"我們強烈建議您關閉此設定。您可以依照 <link>這些步驟</link> 來進行。",line4:"若關閉此設定並未修復文字元素的顯示問題,請回報於我們 GitHub 上的 <issueLink>issue</issueLink>,或在 <discordLink>Discord</discordLink> 上告訴我們。"},libraryElementTypeError:{embeddable:"可嵌入元素無法加入資料庫",iframe:"IFrame 元素無法加入資料庫",image:"即將支援加入圖片至資料庫!"},asyncPasteFailedOnRead:"無法貼上(無法由系統剪貼簿讀入)",asyncPasteFailedOnParse:"無法貼上",copyToSystemClipboardFailed:"無法複製至剪貼簿"},A={selection:"選取",image:"插入圖片",rectangle:"長方形",diamond:"菱形",ellipse:"橢圓",arrow:"箭頭",line:"線條",freedraw:"繪圖",text:"文字",library:"資料庫",lock:"可連續使用選取的工具",penMode:"筆模式 - 避免觸摸",link:"為所選的形狀增加\b/更新連結",eraser:"橡皮擦",frame:"框架工具",magicframe:"線框稿轉為程式碼",embeddable:"嵌入網站",laser:"雷射筆",hand:"手形(平移工具)",extraTools:"更多工具",mermaidToExcalidraw:"Mermaid 至 Excalidraw",magicSettings:"AI 設定"},D={canvasActions:"canvas 動作",selectedShapeActions:"選取圖形動作",shapes:"形狀"},B={canvasPanning:"若要移動畫布,請在拖曳時按住滑鼠滾輪或空白鍵,或使用手形工具",linearElement:"點擊以繪製多點曲線;或拖曳以繪製直線",freeDraw:"點擊並拖曳來繪圖,放開即結束",text:"提示:亦可使用選取工具在任何地方雙擊來加入文字",embeddable:"點擊並拖移以建立嵌入網站",text_selected:"雙擊滑鼠或按 Enter 以編輯文字",text_editing:"按跳脫鍵或 Ctrl 或 Cmd + Enter 以結束編輯",linearElementMulti:"按下 Escape 或 Enter 以結束繪製",lockAngle:"按住 SHIFT 可限制旋轉角度",resize:"縮放時按住 Shift 可保持原比例縮放;\\n按住 Alt 可由中心點進行縮放",resizeImage:"按住 SHIFT 可任意縮放,按住 ALT 可由中央縮放。",rotate:"旋轉時按住 Shift 可限制旋轉角度",lineEditor_info:"按住 Ctrl 或 Cmd 並雙擊或按住 Ctrl 或 Cmd + Enter 來編輯控制點",lineEditor_pointSelected:"按下 Delete 可移除錨點;Ctrl 或 Cmd + D 可複製;或可拖曳來移動",lineEditor_nothingSelected:`選擇要編輯的錨點(按住 SHIFT 可多選),
|
package/dist-renderer/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>State Change Council</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-Cc7m7vZn.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="./assets/index-CYsh274_.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body class="h-screen overflow-hidden antialiased">
|
|
11
11
|
<div id="root" class="h-full"></div>
|
package/package.json
CHANGED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: council-create-councilor
|
|
3
|
+
description: Create a new AI Council councilor from a person, book, body of work, or concept. Builds the ABOUT.md with frontmatter and system prompt, registers it, and verifies it loads. Use when the user wants to add a new perspective to their council.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: ai-council
|
|
7
|
+
version: "1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Create a Council Councilor
|
|
11
|
+
|
|
12
|
+
Build and register a new councilor for the AI Council.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Ensure council is installed
|
|
18
|
+
which council || npm install -g @statechange/council
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Procedure
|
|
22
|
+
|
|
23
|
+
### Step 1: Gather Source Material
|
|
24
|
+
|
|
25
|
+
Determine what the councilor is based on. This could be:
|
|
26
|
+
|
|
27
|
+
- **A person/author**: Research their key ideas, frameworks, and perspectives. If they have books in the conversation or accessible online, fetch and read them.
|
|
28
|
+
- **A book**: Extract the core thesis, key frameworks, and actionable principles.
|
|
29
|
+
- **A concept/role**: Define the perspective, methodology, and decision-making lens.
|
|
30
|
+
- **A URL**: Fetch the content and distill the perspective it represents.
|
|
31
|
+
|
|
32
|
+
If source material is available as a URL or file, fetch it:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
curl -sL "https://example.com/source" -o /tmp/councilor-source.txt
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Step 2: Choose an ID
|
|
39
|
+
|
|
40
|
+
The councilor ID is the directory name. Use lowercase, hyphenated:
|
|
41
|
+
|
|
42
|
+
- Person: `first-last` (e.g., `neal-ford`, `chip-huyen`)
|
|
43
|
+
- Concept: `the-role` (e.g., `the-strategist`, `the-critic`)
|
|
44
|
+
- Book-based: `author-name` or `book-slug`
|
|
45
|
+
|
|
46
|
+
### Step 3: Write the ABOUT.md
|
|
47
|
+
|
|
48
|
+
Create the councilor directory and ABOUT.md:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
mkdir -p ~/.ai-council/councilors/COUNCILOR_ID
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The ABOUT.md has two parts:
|
|
55
|
+
|
|
56
|
+
#### Part 1: YAML Frontmatter
|
|
57
|
+
|
|
58
|
+
```yaml
|
|
59
|
+
---
|
|
60
|
+
name: "Display Name"
|
|
61
|
+
description: "One-line description of their perspective and expertise"
|
|
62
|
+
interests: ["topic1", "topic2", "topic3", "topic4", "topic5"]
|
|
63
|
+
backend: "anthropic"
|
|
64
|
+
model: "claude-sonnet-4-6"
|
|
65
|
+
temperature: 0.7
|
|
66
|
+
avatar: "https://api.dicebear.com/9.x/personas/svg?seed=UniqueSlug&backgroundColor=b6e3f4"
|
|
67
|
+
---
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Field guidance:**
|
|
71
|
+
|
|
72
|
+
- **name**: How they appear in discussions. Use their real name for real people, a title for archetypes.
|
|
73
|
+
- **description**: What they bring to the council. Under 120 chars.
|
|
74
|
+
- **interests**: 5-8 terms reflecting their domains. Used for councilor selection matching.
|
|
75
|
+
- **backend**: Which LLM backend to use. `anthropic` or `google` are recommended. Use `google` with `gemini-flash-latest` for cheaper councilors.
|
|
76
|
+
- **model**: Specific model ID. Good defaults:
|
|
77
|
+
- Anthropic: `claude-sonnet-4-6` (balanced), `claude-haiku-4-5-20251001` (fast/cheap)
|
|
78
|
+
- Google: `gemini-flash-latest` (fast/cheap)
|
|
79
|
+
- **temperature**: 0.5-0.6 for analytical thinkers, 0.7 for balanced, 0.8-0.9 for creative/provocative
|
|
80
|
+
- **avatar**: For real people, prefer downloading a public-domain image as `avatar.jpg` in the councilor directory and setting `avatar: "avatar.jpg"`. Use DiceBear URL as fallback for fictional personas. Background colors: `b6e3f4` (blue), `ffd5dc` (pink), `c0aede` (purple), `d1d4f9` (lavender), `ffeab6` (yellow).
|
|
81
|
+
|
|
82
|
+
#### Part 2: System Prompt
|
|
83
|
+
|
|
84
|
+
Write this directly after the frontmatter closing `---`:
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
You are [Name], [role/credentials]. You serve on a council of experts.
|
|
88
|
+
|
|
89
|
+
**[Book/Framework Title]**: [Core thesis in 2-3 sentences]. [Key ideas as a structured list or paragraphs, covering 3-6 main principles/frameworks].
|
|
90
|
+
|
|
91
|
+
When contributing to a discussion:
|
|
92
|
+
- [Specific behavioral instruction 1]
|
|
93
|
+
- [Specific behavioral instruction 2]
|
|
94
|
+
- [Specific behavioral instruction 3]
|
|
95
|
+
- [Specific behavioral instruction 4]
|
|
96
|
+
- [What makes their perspective unique]
|
|
97
|
+
|
|
98
|
+
Keep your responses focused and substantive. Aim for 2-4 paragraphs per turn.
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**System prompt principles:**
|
|
102
|
+
- Ground the persona in specific ideas, not vague personality traits
|
|
103
|
+
- Name their frameworks and methods explicitly — these are what make the councilor useful
|
|
104
|
+
- Behavioral instructions should describe HOW they engage, not just what they know
|
|
105
|
+
- End with the standard "2-4 paragraphs per turn" instruction
|
|
106
|
+
|
|
107
|
+
#### For source-material-heavy councilors
|
|
108
|
+
|
|
109
|
+
If you have large reference text (book content, articles, essays), append it after the system prompt:
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Reference Material: [Title]
|
|
115
|
+
|
|
116
|
+
Draw on the following source material when contributing to discussions.
|
|
117
|
+
|
|
118
|
+
[Full text here]
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
For large texts, use file concatenation to avoid LLM output limits:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Write header (frontmatter + system prompt) to temp file
|
|
125
|
+
cat > /tmp/councilor-header.md << 'HEADER'
|
|
126
|
+
---
|
|
127
|
+
name: "..."
|
|
128
|
+
...
|
|
129
|
+
---
|
|
130
|
+
System prompt here...
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Reference Material: Title
|
|
135
|
+
|
|
136
|
+
Draw on the following source material when contributing to discussions.
|
|
137
|
+
|
|
138
|
+
HEADER
|
|
139
|
+
|
|
140
|
+
# Concatenate header + source body
|
|
141
|
+
cat /tmp/councilor-header.md /tmp/source-body.txt > ~/.ai-council/councilors/COUNCILOR_ID/ABOUT.md
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Step 4: Register the Councilor
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
council councilor add ~/.ai-council/councilors/COUNCILOR_ID
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Step 5: Verify
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
council list 2>/dev/null | grep -A 2 "COUNCILOR_ID"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Confirm the councilor appears with correct name, backend, and interests.
|
|
157
|
+
|
|
158
|
+
## Examples
|
|
159
|
+
|
|
160
|
+
### From a person/author
|
|
161
|
+
|
|
162
|
+
User: "Make a councilor based on Simon Sinek"
|
|
163
|
+
|
|
164
|
+
1. Research Simon Sinek's key ideas (Start With Why, infinite games, leadership)
|
|
165
|
+
2. Create `~/.ai-council/councilors/simon-sinek/ABOUT.md`
|
|
166
|
+
3. Register with `council councilor add ~/.ai-council/councilors/simon-sinek`
|
|
167
|
+
|
|
168
|
+
### From a concept
|
|
169
|
+
|
|
170
|
+
User: "I need a security-focused councilor"
|
|
171
|
+
|
|
172
|
+
1. Define the security perspective (threat modeling, OWASP, zero trust, attack surface)
|
|
173
|
+
2. Create `~/.ai-council/councilors/the-security-hawk/ABOUT.md`
|
|
174
|
+
3. Register
|
|
175
|
+
|
|
176
|
+
### From a URL
|
|
177
|
+
|
|
178
|
+
User: "Make a councilor based on this article: https://example.com/manifesto"
|
|
179
|
+
|
|
180
|
+
1. Fetch the URL content
|
|
181
|
+
2. Extract the key ideas and frameworks
|
|
182
|
+
3. Create the councilor with the article content as reference material
|
|
183
|
+
4. Register
|
|
184
|
+
|
|
185
|
+
## Common Mistakes
|
|
186
|
+
|
|
187
|
+
- **Too vague**: "You are a business expert who gives good advice" — useless. Name specific frameworks and methods.
|
|
188
|
+
- **Too long**: System prompts over ~2KB before reference material. Keep the core prompt tight; put bulk text in reference material section.
|
|
189
|
+
- **Wrong temperature**: Using 0.9 for an analytical thinker or 0.5 for a creative provocateur.
|
|
190
|
+
- **Missing interests**: These are used for matching in the discuss-idea skill. Always include 5-8 relevant terms.
|
|
191
|
+
- **Creating in project directory**: Always use `~/.ai-council/councilors/` — never put councilors in a project's local `./council/` directory.
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: council-discuss-idea
|
|
3
|
+
description: Run a council discussion on any topic, idea, or URL. Automatically selects relevant councilors from those installed, runs a multi-round debate, and returns only the summary. Full transcript is saved to a temp file for optional deep-dive. Use when you need expert perspectives on a strategy, architecture, product, or business problem.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: ai-council
|
|
7
|
+
version: "2.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Council Discuss Idea
|
|
11
|
+
|
|
12
|
+
Run a focused council discussion and return a clean summary. The full debate transcript is saved to a temp file — not loaded into context — so the caller can grep it if needed.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
Council CLI must be installed. If `council` is not found:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g @statechange/council
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
A secretary backend must be configured (it produces the summary). Check with:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
council config show
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Procedure
|
|
29
|
+
|
|
30
|
+
### Step 1: Discover Available Councilors
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
council list 2>/dev/null | grep -E '^\w|^ Backend|^ Interests'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Parse the output to get councilor IDs and their interests/descriptions. Only use councilors that are actually listed — do not assume any are available.
|
|
37
|
+
|
|
38
|
+
### Step 2: Select Councilors for the Topic
|
|
39
|
+
|
|
40
|
+
Based on the topic and each councilor's listed interests/description, pick 3-5 councilors that are most relevant. Guidelines:
|
|
41
|
+
|
|
42
|
+
- **Always include diverse perspectives** — at least one who will naturally challenge the idea
|
|
43
|
+
- **Match by interests** — the councilor list shows each one's interests, use those to match
|
|
44
|
+
- **Prefer fewer, more relevant councilors** over many loosely related ones
|
|
45
|
+
- **3-5 is ideal** — enough for cross-pollination, not so many it dilutes focus
|
|
46
|
+
|
|
47
|
+
### Step 3: Run the Discussion
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
council discuss "THE TOPIC OR QUESTION" \
|
|
51
|
+
--councilors id1,id2,id3,id4 \
|
|
52
|
+
--rounds 2 \
|
|
53
|
+
--format json \
|
|
54
|
+
--output /tmp/council-discussions \
|
|
55
|
+
2>&1
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Important notes:**
|
|
59
|
+
- The topic can include URLs — they will be automatically fetched and included as context
|
|
60
|
+
- Use `--rounds 2` for good depth (round 1 = initial takes, round 2 = cross-pollination)
|
|
61
|
+
- Use `--format json` so the full structured output is saved
|
|
62
|
+
- Use `--output /tmp/council-discussions` to keep transcripts in a predictable location
|
|
63
|
+
- The CLI streams output to stderr while running — capture both stdout and stderr
|
|
64
|
+
|
|
65
|
+
### Step 4: Extract the Summary
|
|
66
|
+
|
|
67
|
+
The JSON output file contains the full discussion. Extract just the summary:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Find the most recent output file
|
|
71
|
+
TRANSCRIPT=$(ls -t /tmp/council-discussions/council-*.json 2>/dev/null | head -1)
|
|
72
|
+
|
|
73
|
+
# Extract the summary (the secretary's synthesis)
|
|
74
|
+
cat "$TRANSCRIPT" | python3 -c "
|
|
75
|
+
import json, sys
|
|
76
|
+
data = json.load(sys.stdin)
|
|
77
|
+
summary = data.get('summary', '')
|
|
78
|
+
if summary:
|
|
79
|
+
print(summary)
|
|
80
|
+
else:
|
|
81
|
+
# No secretary summary — fall back to last round turns
|
|
82
|
+
for turn in data.get('turns', []):
|
|
83
|
+
if turn['round'] == data.get('rounds', 1):
|
|
84
|
+
print(f\"**{turn['councilorName']}**: {turn['content']}\n\")
|
|
85
|
+
"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Step 5: Return Results to the Caller
|
|
89
|
+
|
|
90
|
+
Present to the user:
|
|
91
|
+
|
|
92
|
+
1. **The summary** — this is the primary output. It contains convergence, divergence, and synthesis.
|
|
93
|
+
2. **The transcript path** — mention it so the user (or agent) can dive deeper: "Full transcript saved to `{TRANSCRIPT}`"
|
|
94
|
+
3. **Brief councilor attribution** — which councilors participated (names only)
|
|
95
|
+
|
|
96
|
+
**Do NOT** dump the full transcript into the response. The whole point is keeping context clean.
|
|
97
|
+
|
|
98
|
+
If the user wants to explore a specific councilor's take or a specific point of contention, THEN grep the transcript file:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Find what a specific councilor said
|
|
102
|
+
grep -A 50 '"councilorName": "Neal Ford"' "$TRANSCRIPT"
|
|
103
|
+
|
|
104
|
+
# Or read the full markdown for human consumption
|
|
105
|
+
cat /tmp/council-discussions/council-*.md | head -200
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Example
|
|
109
|
+
|
|
110
|
+
User says: "What do you think about building a SaaS that helps restaurants manage food waste using computer vision?"
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Step 1: Check who's available
|
|
114
|
+
council list 2>/dev/null | grep -E '^\w'
|
|
115
|
+
|
|
116
|
+
# Step 2: Pick relevant councilors (suppose we found these)
|
|
117
|
+
# marc-andreessen (market/startups), chip-huyen (AI/CV), daniel-priestley (business model), chan-kim (market creation), critic (stress test)
|
|
118
|
+
|
|
119
|
+
# Step 3: Run it
|
|
120
|
+
council discuss "Should we build a SaaS that helps restaurants manage food waste using computer vision? The idea is to use cameras in kitchens to identify and quantify food waste, then provide actionable insights to reduce it. Target market is mid-to-large restaurant chains (50+ locations)." \
|
|
121
|
+
--councilors marc-andreessen,chip-huyen,daniel-priestley,chan-kim,critic \
|
|
122
|
+
--rounds 2 \
|
|
123
|
+
--format json \
|
|
124
|
+
--output /tmp/council-discussions \
|
|
125
|
+
2>&1
|
|
126
|
+
|
|
127
|
+
# Step 4: Get the summary
|
|
128
|
+
TRANSCRIPT=$(ls -t /tmp/council-discussions/council-*.json | head -1)
|
|
129
|
+
python3 -c "import json; d=json.load(open('$TRANSCRIPT')); print(d.get('summary','No summary generated'))"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Then respond with the summary + transcript path.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: council-install-councilor
|
|
3
|
+
description: Install councilors from git repos, local directories, or shared collections. Use when the user wants to add an existing councilor they didn't create — from GitHub, a team repo, or a local path. Also handles multi-councilor repos that contain several councilors in one repository.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: ai-council
|
|
7
|
+
version: "1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Install a Councilor
|
|
11
|
+
|
|
12
|
+
Add existing councilors to your AI Council from git repos or local directories.
|
|
13
|
+
|
|
14
|
+
## Prerequisites
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
which council || npm install -g @statechange/council
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## When to Use
|
|
21
|
+
|
|
22
|
+
- The user wants to install a councilor from GitHub or another git host
|
|
23
|
+
- The user has a local directory with councilor(s) they want to register
|
|
24
|
+
- The user wants to install a shared collection of councilors from a team repo
|
|
25
|
+
- The user says "add councilor", "install councilor", "import councilor", or "get councilor from..."
|
|
26
|
+
|
|
27
|
+
## Procedure
|
|
28
|
+
|
|
29
|
+
### Install from a Git Repository
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
council councilor add https://github.com/user/councilor-repo.git
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
What happens:
|
|
36
|
+
1. The repo is cloned to `~/.ai-council/councilors/<repo-name>/`
|
|
37
|
+
2. If the repo root has an `ABOUT.md`, it's registered as a single councilor
|
|
38
|
+
3. If the repo root has NO `ABOUT.md`, child directories are scanned — each one with an `ABOUT.md` is registered as a separate councilor (multi-councilor repo)
|
|
39
|
+
|
|
40
|
+
URL detection: anything starting with `http://`, `https://`, or ending with `.git` is treated as a git URL.
|
|
41
|
+
|
|
42
|
+
### Install from a Local Directory
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
council councilor add /path/to/councilor-directory
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The directory must contain an `ABOUT.md` with valid YAML frontmatter. The councilor is registered by reference (not copied) — it stays where it is on disk.
|
|
49
|
+
|
|
50
|
+
### Install Multiple from a Local Collection
|
|
51
|
+
|
|
52
|
+
If you have a directory containing multiple councilor subdirectories:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Register each subdirectory individually
|
|
56
|
+
for d in /path/to/collection/*/; do
|
|
57
|
+
if [ -f "$d/ABOUT.md" ]; then
|
|
58
|
+
council councilor add "$d"
|
|
59
|
+
fi
|
|
60
|
+
done
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Verify Installation
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# List all registered councilors
|
|
67
|
+
council councilor list
|
|
68
|
+
|
|
69
|
+
# Or see full details
|
|
70
|
+
council list
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Managing Installed Councilors
|
|
74
|
+
|
|
75
|
+
### List registered councilors
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
council councilor list
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Shows each councilor's ID, source (local/git), path, and when it was added.
|
|
82
|
+
|
|
83
|
+
### Remove a councilor
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Unregister only (keeps files on disk)
|
|
87
|
+
council councilor remove councilor-id
|
|
88
|
+
|
|
89
|
+
# Unregister AND delete cloned files (for git-sourced councilors)
|
|
90
|
+
council councilor remove councilor-id --yes
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Update a git-sourced councilor
|
|
94
|
+
|
|
95
|
+
Git-sourced councilors are cloned repos. To update:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
cd ~/.ai-council/councilors/councilor-name
|
|
99
|
+
git pull
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Troubleshooting
|
|
103
|
+
|
|
104
|
+
### "No ABOUT.md found"
|
|
105
|
+
|
|
106
|
+
The directory must contain an `ABOUT.md` at its root with valid YAML frontmatter (name, description, backend, interests).
|
|
107
|
+
|
|
108
|
+
### Councilor shows but won't work in discussions
|
|
109
|
+
|
|
110
|
+
Check that the councilor's backend has a configured API key:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
council config show
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Councilor from git repo not appearing
|
|
117
|
+
|
|
118
|
+
For multi-councilor repos, each councilor subdirectory needs its own `ABOUT.md`. Check the cloned directory:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
ls ~/.ai-council/councilors/repo-name/
|
|
122
|
+
```
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{U as a,C as n}from"./index-CsJIZuMr.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{b as r}from"./graph-KjGTQ8qd.js";var e=4;function a(o){return r(o,e)}export{a as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{f as o,p as e}from"./flowDb-956e92f1-DR2fF74n.js";import{f as a,a as t}from"./styles-c10674c1-DrNd7u60.js";import{x as i}from"./index-CsJIZuMr.js";import"./graph-KjGTQ8qd.js";import"./layout-BMJBnVbc.js";import"./percentages-BXMCSKIN-C_WTAk1u.js";import"./index-3862675e-CCE1hBgs.js";import"./clone-CdbunAYL.js";import"./edges-e0da2a9e-C9UtuZtL.js";import"./createText-2e5e7dd3-DPeQ2O5Z.js";import"./index-BUIE-P96.js";import"./line-DYvIrKnf.js";import"./array-BKyUJesY.js";import"./path-CbwjOpE9.js";import"./channel-CbR4ut5U.js";const c={parser:e,db:o,renderer:t,styles:a,init:r=>{r.flowchart||(r.flowchart={}),r.flowchart.arrowMarkerAbsolute=r.arrowMarkerAbsolute,i({flowchart:{arrowMarkerAbsolute:r.arrowMarkerAbsolute}}),t.setConf(r.flowchart),o.clear(),o.setGen("gen-2")}};export{c as diagram};
|