@inkeep/open-knowledge 0.46.0-beta.7 → 0.46.0-beta.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/dist/THIRD_PARTY_NOTICES.md +10 -0
- package/dist/{acp-harness-probe-BladNRtA.mjs → acp-harness-probe-4DjqrOhu.mjs} +2 -2
- package/dist/assets/skills/discovery/SKILL.md +1 -2
- package/dist/assets/skills/packs/codebase-wiki/SKILL.md +6 -7
- package/dist/assets/skills/packs/codebase-wiki/references/generate-and-refresh.md +160 -0
- package/dist/assets/skills/packs/entity-vault/SKILL.md +2 -3
- package/dist/assets/skills/packs/knowledge-base/SKILL.md +26 -9
- package/dist/assets/skills/packs/knowledge-base/consolidate/SKILL.md +160 -0
- package/dist/assets/skills/packs/knowledge-base/research/SKILL.md +375 -0
- package/dist/assets/skills/packs/okf/SKILL.md +2 -3
- package/dist/assets/skills/packs/plain-notes/SKILL.md +4 -3
- package/dist/assets/skills/packs/software-lifecycle/SKILL.md +14 -3
- package/dist/assets/skills/packs/software-lifecycle/frame-a-proposal/SKILL.md +222 -0
- package/dist/assets/skills/packs/software-lifecycle/record-a-decision/SKILL.md +188 -0
- package/dist/assets/skills/packs/software-lifecycle/review-a-design/SKILL.md +137 -0
- package/dist/assets/skills/packs/software-lifecycle/write-a-postmortem/SKILL.md +202 -0
- package/dist/assets/skills/packs/software-lifecycle/write-a-spec/SKILL.md +298 -0
- package/dist/assets/skills/packs/worldbuilding/SKILL.md +2 -3
- package/dist/assets/skills/packs/writing-pipeline/SKILL.md +5 -3
- package/dist/assets/skills/project/SKILL.md +29 -30
- package/dist/assets/skills/project/references/anti-patterns.md +1 -1
- package/dist/assets/skills/project/references/corpus-qa.md +1 -1
- package/dist/assets/skills/project/references/folder-model.md +1 -1
- package/dist/assets/skills/project/references/ingest-and-sources.md +230 -13
- package/dist/assets/skills/project/references/onboard-existing-repo.md +319 -0
- package/dist/assets/skills/project/references/preview.md +1 -1
- package/dist/assets/skills/project/references/setup.md +6 -0
- package/dist/assets/skills/project/references/starter-packs.md +41 -0
- package/dist/assets/skills/write-skill/SKILL.md +69 -28
- package/dist/assets/skills/write-skill/references/pressure-testing.md +4 -3
- package/dist/cli.mjs +62 -62
- package/dist/constants-GWFx-UC8.mjs +2 -0
- package/dist/{git-handle-CK_JXuyw.mjs → git-handle-CUCj-M_k.mjs} +2 -2
- package/dist/git-handle-c0ljFZis.mjs +1 -0
- package/dist/index.mjs +1 -1
- package/dist/{init-CxYfITcc.mjs → init-DWCsIT2Y.mjs} +37 -37
- package/dist/init-ZV2BMIkj.mjs +1 -0
- package/dist/{launch-json-removal-CLKYnwd0.mjs → launch-json-removal-BCxhJz-M.mjs} +2 -2
- package/dist/{loader-Bpd9I1fg.mjs → loader-84N4YMxM.mjs} +2 -2
- package/dist/loader-gOaiaXCo.mjs +1 -0
- package/dist/md-manager-usiCjUg4.mjs +2 -0
- package/dist/{open-browser-BHXl6F9O.mjs → open-browser-D-fJ9iwf.mjs} +2 -2
- package/dist/parse-worker.mjs +1 -1
- package/dist/{preview-D9DiqfyY.mjs → preview-Ce0jIM-0.mjs} +2 -2
- package/dist/preview-TJlA1vTS.mjs +1 -0
- package/dist/public/assets/ActivityModeContent-DwfZoDZE.js +1 -0
- package/dist/public/assets/{AgentDiffPane-6bk9bV9U.js → AgentDiffPane-BwPzooAs.js} +2 -2
- package/dist/public/assets/{AgentThreadClientBinder-u3ZVSSHE.js → AgentThreadClientBinder-Lk-U9Zg5.js} +1 -1
- package/dist/public/assets/AppMenubar-7eBxIB37.js +1 -0
- package/dist/public/assets/{BugReportHistory-D_60pb7r.js → BugReportHistory-CaAYnGNR.js} +1 -1
- package/dist/public/assets/{BugReportHistoryDialog-BzJsPoev.js → BugReportHistoryDialog-DFfft492.js} +1 -1
- package/dist/public/assets/ChangedOutsideBadge-Colj6RSy.js +1 -0
- package/dist/public/assets/CodeMirrorPropInput-BPdsBH1q.js +3 -0
- package/dist/public/assets/{ConfigSharingInfoTooltip-BMJ7SIjf.js → ConfigSharingInfoTooltip-QTCODx7g.js} +1 -1
- package/dist/public/assets/{ConsentDialogBody-DWXqUhzJ.js → ConsentDialogBody-U4UzjnaQ.js} +1 -1
- package/dist/public/assets/CopyButton-O0Y9mXoH.js +1 -0
- package/dist/public/assets/DiffView-kKTjtgKq.js +3 -0
- package/dist/public/assets/DocumentContext-e2BbWZTU.js +38 -0
- package/dist/public/assets/EditorModeToggle-DLKntrL5.js +2 -0
- package/dist/public/assets/EnableSyncConfirmDialog-B7V1Wevc.js +1 -0
- package/dist/public/assets/FeedbackForm-YYOLAdPR.js +1 -0
- package/dist/public/assets/{GraphPanel-DZMLD8ni.js → GraphPanel-D3gnL5o6.js} +2 -2
- package/dist/public/assets/ImportSkillDialog-BNwWAA09.js +1 -0
- package/dist/public/assets/{LintConfigEditor-k9WOKYkq.js → LintConfigEditor-BUt6XicS.js} +1 -1
- package/dist/public/assets/ManagedArtifactProperties-3CrCQfFo.js +2 -0
- package/dist/public/assets/ManagedArtifactProperties-DK6O07ZX.js +1 -0
- package/dist/public/assets/McpConsentDialogBody-CTl5E-Pz.js +1 -0
- package/dist/public/assets/{MermaidDocEditor-CGsfhioE.js → MermaidDocEditor-rdCH3a-W.js} +1 -1
- package/dist/public/assets/{RegisteredAgentIcon-CyQDojW_.js → RegisteredAgentIcon-CHh3fima.js} +1 -1
- package/dist/public/assets/{ReportBugDialogBody-CdEV6nCR.js → ReportBugDialogBody-DfS6oBiL.js} +1 -1
- package/dist/public/assets/SchemaConfigEditor-DaRdC9By.js +1 -0
- package/dist/public/assets/SettingsDialogBody-JKJ7DbBe.js +7 -0
- package/dist/public/assets/{ShareBranchSwitchDialog-jGb4KF7T.js → ShareBranchSwitchDialog-BT-R1a5Z.js} +1 -1
- package/dist/public/assets/ShareReceiveDialog-D7WQ4KbX.js +1 -0
- package/dist/public/assets/ShareReceiveMissDialog-AS-ub3Fc.js +1 -0
- package/dist/public/assets/SkillEditBanner-DPe0it-V.js +1 -0
- package/dist/public/assets/SkillModeBanner-CsKHM-QY.js +1 -0
- package/dist/public/assets/SkillOriginInline-VUn5IDZk.js +1 -0
- package/dist/public/assets/SkillToolbarControls-CzJ4nZzA.js +1 -0
- package/dist/public/assets/SourceEditor-C-cUCtJw.js +1 -0
- package/dist/public/assets/{TerminalPanel-BHN2VN4r.js → TerminalPanel-yzvzgUXS.js} +3 -3
- package/dist/public/assets/TerminalSessionsHost-dj1xA_0P.js +2 -0
- package/dist/public/assets/{TerminalWindowApp-CI-7rld6.js → TerminalWindowApp-B6EhrqIb.js} +1 -1
- package/dist/public/assets/ThreadView-aANZPCSh.js +6 -0
- package/dist/public/assets/TimelineDiffPane-u9qtPOhN.js +2 -0
- package/dist/public/assets/{abnfDiagram-VRR7QNED-Cyah47m9.js → abnfDiagram-VRR7QNED-CYyOqigz.js} +1 -1
- package/dist/public/assets/agent-diff-store-DKxdS6mK.js +1 -0
- package/dist/public/assets/agent-visibility-Dz2lrJHw.js +1 -0
- package/dist/public/assets/{arc-B3aheyNj.js → arc-DpnwTjlg.js} +1 -1
- package/dist/public/assets/architecture-TIHT7OUA-Bl7-zFAE.js +1 -0
- package/dist/public/assets/{architectureDiagram-ZJ3FMSHR-lZYHIfAt.js → architectureDiagram-ZJ3FMSHR-BArScuNA.js} +1 -1
- package/dist/public/assets/arrow-up-right-BZsQghvQ.js +1 -0
- package/dist/public/assets/auth-state-cache-C9Qx3bjQ.js +11 -0
- package/dist/public/assets/badge-DB5BJfSU.js +1 -0
- package/dist/public/assets/{blockDiagram-677ZJIJ3-mULu-3uH.js → blockDiagram-677ZJIJ3-BKdJnykw.js} +1 -1
- package/dist/public/assets/{braces-DwnwFx_V.js → braces-CqiL3TOP.js} +1 -1
- package/dist/public/assets/button-oSXzJYWO.js +1 -0
- package/dist/public/assets/{c4Diagram-LMCZKHZV-DN4YpCzk.js → c4Diagram-LMCZKHZV-BGzHBzYq.js} +1 -1
- package/dist/public/assets/{calendar-DqGTQwGe.js → calendar-C2lP75MI.js} +1 -1
- package/dist/public/assets/{case-sensitive-nl0tWMnZ.js → case-sensitive-DcowXaLf.js} +1 -1
- package/dist/public/assets/channel-Bf_IZmsH.js +1 -0
- package/dist/public/assets/check-DA7_vRdO.js +1 -0
- package/dist/public/assets/checkbox-DYPwCq3O.js +1 -0
- package/dist/public/assets/{chevron-down-Bx9f3tW-.js → chevron-down-BJumc1E_.js} +1 -1
- package/dist/public/assets/chevron-left-D8z-buF6.js +1 -0
- package/dist/public/assets/chevron-right-CgsPV9lV.js +1 -0
- package/dist/public/assets/chunk-2Q5K7J3B-CBNXZghD.js +1 -0
- package/dist/public/assets/{chunk-32BRIVSS-DqkgLIEw.js → chunk-32BRIVSS-DWFi-mYl.js} +1 -1
- package/dist/public/assets/{chunk-52WLFC77-9s8UsQXp.js → chunk-52WLFC77-C3ewIu0v.js} +1 -1
- package/dist/public/assets/{chunk-5FCAYU7R-CkSFjjQr.js → chunk-5FCAYU7R-DH0H_TSt.js} +1 -1
- package/dist/public/assets/{chunk-5HE753X5-C1Ig4mMr.js → chunk-5HE753X5-COZLeOUQ.js} +1 -1
- package/dist/public/assets/{chunk-5JV3BV7I-CIggZV0d.js → chunk-5JV3BV7I-BtSn9e5l.js} +1 -1
- package/dist/public/assets/{chunk-5TONJI2A-BklATmUd.js → chunk-5TONJI2A-CyVAUHQY.js} +1 -1
- package/dist/public/assets/{chunk-5VM5RSS4-g5HeYq-z.js → chunk-5VM5RSS4-DkfDxTnu.js} +1 -1
- package/dist/public/assets/{chunk-7BUUIJ7U-Dw__VSpN.js → chunk-7BUUIJ7U-Bwj5weSU.js} +1 -1
- package/dist/public/assets/{chunk-BIQX33UG-CRLx_yn0.js → chunk-BIQX33UG-WShnA3hi.js} +1 -1
- package/dist/public/assets/{chunk-BO2N2NFS-BptiXfus.js → chunk-BO2N2NFS-0fL-jnUT.js} +4 -4
- package/dist/public/assets/{chunk-C7G6YPKG-CmP7ozUj.js → chunk-C7G6YPKG-JOVwaeql.js} +1 -1
- package/dist/public/assets/{chunk-CQNSW5MT-BZUHEMrz.js → chunk-CQNSW5MT-DmFd2LFl.js} +1 -1
- package/dist/public/assets/{chunk-CYSBUYHQ-BRTRwmYZ.js → chunk-CYSBUYHQ-BOCWcr_T.js} +1 -1
- package/dist/public/assets/{chunk-EMLP6XTP-DHUO1B6Q.js → chunk-EMLP6XTP-_039-Ubh.js} +1 -1
- package/dist/public/assets/{chunk-EX3LRPZG-aq_XJzX2.js → chunk-EX3LRPZG-CMgFCagr.js} +1 -1
- package/dist/public/assets/{chunk-FWX5IMBZ-rnR9hrS_.js → chunk-FWX5IMBZ-C4vKCoUv.js} +2 -2
- package/dist/public/assets/{chunk-HOUHSVGY-D0096-9K.js → chunk-HOUHSVGY-CZX004Ef.js} +1 -1
- package/dist/public/assets/{chunk-ICXQ74PX-BUnmDgqa.js → chunk-ICXQ74PX-B_iuJAXS.js} +1 -1
- package/dist/public/assets/{chunk-JG7HCLWE-BwRUs0j6.js → chunk-JG7HCLWE-CtDpq51e.js} +1 -1
- package/dist/public/assets/{chunk-JWPE2WC7-BOwE-mq8.js → chunk-JWPE2WC7-pDBBV-ex.js} +1 -1
- package/dist/public/assets/{chunk-MOJQB5TN-CYyw3U64.js → chunk-MOJQB5TN-BOLftHeO.js} +1 -1
- package/dist/public/assets/{chunk-MOZMSUNE-_aAOLW1j.js → chunk-MOZMSUNE-B90rFhRO.js} +1 -1
- package/dist/public/assets/{chunk-OGEWGWER-DLH_3q-Z.js → chunk-OGEWGWER-dIUHPavN.js} +1 -1
- package/dist/public/assets/{chunk-OSBZ3O6U-BOkYzK-N.js → chunk-OSBZ3O6U-C8f7zxUa.js} +1 -1
- package/dist/public/assets/{chunk-PUDLZKDR-Co9OjZVi.js → chunk-PUDLZKDR-QPYzmUFw.js} +1 -1
- package/dist/public/assets/{chunk-Q4XR5HBZ-CjNiHUWo.js → chunk-Q4XR5HBZ--1adMSrR.js} +1 -1
- package/dist/public/assets/{chunk-QBLGF6JB-Cf-f1lin.js → chunk-QBLGF6JB-q87mQ87z.js} +1 -1
- package/dist/public/assets/{chunk-R7FJI6CG-C_nyMdyL.js → chunk-R7FJI6CG-B5NnR0wG.js} +1 -1
- package/dist/public/assets/{chunk-RYQCIY6F-DXXN4Rzo.js → chunk-RYQCIY6F-BnIBPlEn.js} +1 -1
- package/dist/public/assets/{chunk-U6XO7XAA-Hw5M1kkd.js → chunk-U6XO7XAA-DuxWv8i1.js} +1 -1
- package/dist/public/assets/{chunk-V7JOEXUC-CLdet7qK.js → chunk-V7JOEXUC-zQePb8W4.js} +1 -1
- package/dist/public/assets/chunk-VAUOI2AC-K9aKY8La.js +1 -0
- package/dist/public/assets/{chunk-VR4S4FIN-CnZ3Jw81.js → chunk-VR4S4FIN-DOfDyz67.js} +1 -1
- package/dist/public/assets/{chunk-WYO6CB5R-C-c-Ja6D.js → chunk-WYO6CB5R-DAcO6KqN.js} +2 -2
- package/dist/public/assets/chunk-XXDRQBXY-CRN6FsNM.js +1 -0
- package/dist/public/assets/{chunk-YOTPTUD7-CBowI675.js → chunk-YOTPTUD7-DSjCnGGQ.js} +1 -1
- package/dist/public/assets/{chunk-ZGVPDNZ5-DfBSa8vW.js → chunk-ZGVPDNZ5-CnXHsnX3.js} +1 -1
- package/dist/public/assets/{chunk-ZIRB5QZD-Cas2Em51.js → chunk-ZIRB5QZD-rA251rHW.js} +1 -1
- package/dist/public/assets/classDiagram-OUVF2IWQ-B8NyhReL.js +1 -0
- package/dist/public/assets/classDiagram-v2-EOCWNBFH-To5zrK6k.js +1 -0
- package/dist/public/assets/client-version-DmJhhHKP.js +1 -0
- package/dist/public/assets/collapsible-BTn3nxAn.js +1 -0
- package/dist/public/assets/{comment-chips-BYH7v5tl.js → comment-chips-i9o0Cefh.js} +2 -2
- package/dist/public/assets/{config-provider-B9kQH9zn.js → config-provider-CYJIA2qw.js} +2 -2
- package/dist/public/assets/{cose-bilkent-JH36ORCC-CzZaHQ2l.js → cose-bilkent-JH36ORCC-BO3tFb1k.js} +1 -1
- package/dist/public/assets/createLucideIcon-BiRV80uZ.js +1 -0
- package/dist/public/assets/cynefin-VYW2F7L2-DjK3ZZKp.js +1 -0
- package/dist/public/assets/{cynefinDiagram-TSTJHNR4-7PYslCmH.js → cynefinDiagram-TSTJHNR4-kMgUnu_c.js} +1 -1
- package/dist/public/assets/{dagre-BeM31D08.js → dagre-DmGue-PX.js} +1 -1
- package/dist/public/assets/{dagre-VKFMJZFB-DsY-o9S9.js → dagre-VKFMJZFB-CgYSDfeg.js} +1 -1
- package/dist/public/assets/{diagram-FQU43EPY-Cc40Oq-m.js → diagram-FQU43EPY-XRWiX7Im.js} +1 -1
- package/dist/public/assets/{diagram-G47NLZAW-DdbiGkJk.js → diagram-G47NLZAW-BzqAYczi.js} +1 -1
- package/dist/public/assets/{diagram-NH7WQ7WH-BoEA_7qN.js → diagram-NH7WQ7WH-CAOpGCwL.js} +1 -1
- package/dist/public/assets/{diagram-OA4YK3LP-ChsGI8c4.js → diagram-OA4YK3LP-CsYFi60N.js} +1 -1
- package/dist/public/assets/{diagram-WEI45ONY-znZ94tAq.js → diagram-WEI45ONY-BPyyv8e3.js} +1 -1
- package/dist/public/assets/dialog-CkjkuWLF.js +5 -0
- package/dist/public/assets/dist-1J1E9P12.js +1 -0
- package/dist/public/assets/{dist-D7mv9smG.js → dist-6Q9yuoli.js} +1 -1
- package/dist/public/assets/dist-BCIZY0Wq.js +1 -0
- package/dist/public/assets/{dist-Dcu3hl7e.js → dist-BK-fqCFD.js} +1 -1
- package/dist/public/assets/{dist-DEamjSXE.js → dist-BM4ov2mK.js} +1 -1
- package/dist/public/assets/dist-BVNHmhkE.js +1 -0
- package/dist/public/assets/{dist-B25wDFyk.js → dist-Bdhn2jv42.js} +1 -1
- package/dist/public/assets/{dist-P9LB04An.js → dist-BkSGIgDv.js} +1 -1
- package/dist/public/assets/dist-C22Eiu6U.js +1 -0
- package/dist/public/assets/{dist-CxGvJvCN.js → dist-C2ZNHEgX.js} +1 -1
- package/dist/public/assets/dist-CEBfbNax.js +1 -0
- package/dist/public/assets/{dist-Dolq1sN0.js → dist-CKHaw45-.js} +1 -1
- package/dist/public/assets/{dist-DlSSwTCj.js → dist-CTPwMRld.js} +1 -1
- package/dist/public/assets/{dist-DmIoqGC0.js → dist-D2AiGKcA.js} +1 -1
- package/dist/public/assets/dist-D57Bktz_.js +1 -0
- package/dist/public/assets/{dist-CsRIthsw2.js → dist-DA8rIjtg.js} +1 -1
- package/dist/public/assets/dist-DcPsSRVd.js +1 -0
- package/dist/public/assets/{dist-BMMI5Kdg.js → dist-Dqtgp0QD2.js} +1 -1
- package/dist/public/assets/dist-Dyi4atb6.js +1 -0
- package/dist/public/assets/{dist-DdFyq-YY.js → dist-FPlC48Ke.js} +1 -1
- package/dist/public/assets/{dist-C7VIqwIG.js → dist-MQd-Irtl.js} +1 -1
- package/dist/public/assets/{dist-C4Kl8QaT.js → dist-_8wb0R99.js} +1 -1
- package/dist/public/assets/{dist-DJbbCXtB.js → dist-fOA99pqU2.js} +184 -182
- package/dist/public/assets/doc-paths-C6A87aH3.js +1 -0
- package/dist/public/assets/documents-events-Dr9N-4vu.js +1 -0
- package/dist/public/assets/download-D3RTVXwv.js +1 -0
- package/dist/public/assets/dropdown-menu-D2umi56L.js +1 -0
- package/dist/public/assets/{ebnfDiagram-CCIWWBDH-DX6whEUG.js → ebnfDiagram-CCIWWBDH-CUTAjine.js} +1 -1
- package/dist/public/assets/{erDiagram-Q63AITRT-CgloxApp.js → erDiagram-Q63AITRT-BSu96D8g.js} +1 -1
- package/dist/public/assets/es2015-Du0OjwY5.js +41 -0
- package/dist/public/assets/{esm-QF0-_nlB.js → esm-DbmiTy2g.js} +1 -1
- package/dist/public/assets/eventmodeling-45OFAUF4-C3gCuhXd.js +1 -0
- package/dist/public/assets/{eye-CASw1HTi.js → eye-yERBaQWj.js} +1 -1
- package/dist/public/assets/field-i4kPdg1V.js +1 -0
- package/dist/public/assets/file-tree-adapter-CvmXjY-P.js +1 -0
- package/dist/public/assets/file-tree-utils-DL3JhHtX.js +1 -0
- package/dist/public/assets/flowDiagram-23GEKE2U-V8thnmzy.js +1 -0
- package/dist/public/assets/folder-8ceGqZIO.js +1 -0
- package/dist/public/assets/folder-config-api-DdtJAaIR.js +1 -0
- package/dist/public/assets/{folder-open-wLd69QUc.js → folder-open-CvyyCBOn.js} +1 -1
- package/dist/public/assets/follow-file-BpD8YozT.js +1 -0
- package/dist/public/assets/form-lIFpKMVU.js +1 -0
- package/dist/public/assets/{ganttDiagram-NO4QXBWP-BZQXYXPf.js → ganttDiagram-NO4QXBWP-Crrr-q7s.js} +1 -1
- package/dist/public/assets/{git-branch-CMJAiYLz.js → git-branch-oPfvsh1I.js} +1 -1
- package/dist/public/assets/gitGraph-TEB2WS4Q-BERn_Vnm.js +1 -0
- package/dist/public/assets/{gitGraphDiagram-IHSO6WYX-DnT15zfc.js → gitGraphDiagram-IHSO6WYX-BdMHODo-.js} +1 -1
- package/dist/public/assets/{globals-LdH7xryz.js → globals-B5uVOYYT.js} +2 -2
- package/dist/public/assets/globals-C6R3KMxA.css +1 -0
- package/dist/public/assets/{graphlib-CIYGRnfF.js → graphlib-DIVfLvlR.js} +1 -1
- package/dist/public/assets/{hash-DNKDqZ18.js → hash-DP25l_li.js} +1 -1
- package/dist/public/assets/{highlighted-body-OFNGDK62-DN5QVB2g.js → highlighted-body-OFNGDK62-Cue0vPGT.js} +1 -1
- package/dist/public/assets/index-DoyHoCFU.js +2092 -0
- package/dist/public/assets/{info-yKMseklR.js → info-Bza7Xa6D.js} +1 -1
- package/dist/public/assets/info-DKCQHKI2-xuBgM0S3.js +1 -0
- package/dist/public/assets/{infoDiagram-FWYZ7A6U-CPJF9vn1.js → infoDiagram-FWYZ7A6U-_RNxdwPC.js} +1 -1
- package/dist/public/assets/input-C4n4n5Hc.js +1 -0
- package/dist/public/assets/input-group-C_H5NgPX.js +1 -0
- package/dist/public/assets/{ishikawaDiagram-FXEZZL3T-CPmyb7Oh.js → ishikawaDiagram-FXEZZL3T-BbXzN7UF.js} +1 -1
- package/dist/public/assets/{journeyDiagram-5HDEW3XC-DHsl5S9z.js → journeyDiagram-5HDEW3XC-BqwkEnJh.js} +1 -1
- package/dist/public/assets/{kanban-definition-HUTT4EX6-BS2xX-qh.js → kanban-definition-HUTT4EX6-CX-ROP0U.js} +1 -1
- package/dist/public/assets/{label-DyipnO5I.js → label-Ds0LTB-Z.js} +1 -1
- package/dist/public/assets/{line-PfwSO0Y4.js → line-D0lohJ6a.js} +1 -1
- package/dist/public/assets/{linear-DY7zcaob.js → linear-By98wvuz.js} +1 -1
- package/dist/public/assets/lint-config-client-Cc5n1dKz.js +1 -0
- package/dist/public/assets/loader-circle-Cn2Xr4cN.js +1 -0
- package/dist/public/assets/{map-B5g_BAkn.js → map-XagOZNs9.js} +1 -1
- package/dist/public/assets/markdownlint-rule-browser-C5r1T2gD.js +1 -0
- package/dist/public/assets/mermaid-GHXKKRXX-CFTslKYT.js +1 -0
- package/dist/public/assets/{mermaid-parser.core-DtiAO5KW.js → mermaid-parser.core-DtOR1aVt.js} +2 -2
- package/dist/public/assets/{mermaid.core-2-fa7F6R.js → mermaid.core-DFRkYHGF.js} +3 -3
- package/dist/public/assets/{mindmap-definition-LN4V7U3C-CTVrQgzc.js → mindmap-definition-LN4V7U3C-BPq8CY-V.js} +1 -1
- package/dist/public/assets/minus-CBRjUXY7.js +1 -0
- package/dist/public/assets/{miss-dialog-store-Bx4JLuKB.js → miss-dialog-store-DBqQ_Nyn.js} +1 -1
- package/dist/public/assets/navigation-targets-CgViVl5N.js +1 -0
- package/dist/public/assets/{now-bAD2ZsK-.js → now-BJ6wHiq6.js} +1 -1
- package/dist/public/assets/open-managed-artifact-tab-B9P9gMUF.js +1 -0
- package/dist/public/assets/{ordinal-Dj8tTCMd.js → ordinal-BhGTF2Fp.js} +1 -1
- package/dist/public/assets/packet-7NZHBO7P-DhQWKabl.js +1 -0
- package/dist/public/assets/panel-FwLLPu5s.js +1 -0
- package/dist/public/assets/{panel-right-open-CWgBRlZa.js → panel-right-open-ChixO1pm.js} +1 -1
- package/dist/public/assets/{paperclip-FiPqbd6f.js → paperclip-CFZOhV8C.js} +1 -1
- package/dist/public/assets/{pegDiagram-2B236MQR-DVy6JL4F.js → pegDiagram-2B236MQR-Bs6HaUdW.js} +1 -1
- package/dist/public/assets/pending-receive-nav-store-lElziPqC.js +1 -0
- package/dist/public/assets/pie-RZYD4A2V-DaewLp2Y.js +1 -0
- package/dist/public/assets/{pieDiagram-ENE6RG2P-Kxbx45IP.js → pieDiagram-ENE6RG2P-BBo6EMS4.js} +1 -1
- package/dist/public/assets/{project-paths-DdZAF_-I.js → project-paths-Cgrv2qcw.js} +1 -1
- package/dist/public/assets/prop-types-Bzfc0oqg.js +1 -0
- package/dist/public/assets/{propagation-api-OHat7V1z.js → propagation-api-DCmicIMI.js} +1 -1
- package/dist/public/assets/{quadrantDiagram-ABIIQ3AL-BbCFEjhq.js → quadrantDiagram-ABIIQ3AL-qmZeOoSr.js} +1 -1
- package/dist/public/assets/radar-I7S5WNFK-DljmjJ2C.js +1 -0
- package/dist/public/assets/radio-group-DFFiLDEM.js +1 -0
- package/dist/public/assets/railroad-3IZDKUUU-6CgLOfBJ.js +1 -0
- package/dist/public/assets/railroad-abnf-AHOZXSZD-DQ60e1aW.js +1 -0
- package/dist/public/assets/railroad-ebnf-EBAXGLYW-Da8xQ_1N.js +1 -0
- package/dist/public/assets/railroad-peg-LSFZ7HO6-CDOeiUF5.js +1 -0
- package/dist/public/assets/{railroadDiagram-RFXS5EU6-6SEpaCgo.js → railroadDiagram-RFXS5EU6-DE_EvwtV.js} +1 -1
- package/dist/public/assets/{receive-store-C8NL_Ow-.js → receive-store-Bz-bzj4g.js} +1 -1
- package/dist/public/assets/{refresh-cw-DClG_qgN.js → refresh-cw-D3t5sdqM.js} +1 -1
- package/dist/public/assets/{requirementDiagram-TGXJPOKE-brbJ6VUS.js → requirementDiagram-TGXJPOKE-BZ-rKt8B.js} +1 -1
- package/dist/public/assets/{sankeyDiagram-HTMAVEWB-DT0MK3ep.js → sankeyDiagram-HTMAVEWB-B9AZEJIc.js} +1 -1
- package/dist/public/assets/{schema-fields-view-intent-CDu72Aty.js → schema-fields-view-intent-SQVE5W3s.js} +1 -1
- package/dist/public/assets/select-DyVZCohx.js +1 -0
- package/dist/public/assets/{selection-context-BNYOSYyM.js → selection-context-DdcFoUdp.js} +1 -1
- package/dist/public/assets/{separator-DExEeoYE.js → separator-4_yBRx-q.js} +1 -1
- package/dist/public/assets/{sequenceDiagram-DBY2YBRQ-BPJt9blB.js → sequenceDiagram-DBY2YBRQ-DR0l3jeO.js} +1 -1
- package/dist/public/assets/{sizeCapture-X5ZJPWSS-1l7G4SwD.js → sizeCapture-X5ZJPWSS-CK3vwB3X.js} +1 -1
- package/dist/public/assets/skeleton-BlTc8h6X.js +1 -0
- package/dist/public/assets/skill-actions-DCU7_Sac.js +2 -0
- package/dist/public/assets/skill-scope-CYrWegR8.js +1 -0
- package/dist/public/assets/skills-api-CC0Fy08A.js +1 -0
- package/dist/public/assets/square-pen-wqme9vlv.js +1 -0
- package/dist/public/assets/{src-U1RHfo7d.js → src-BULLuFw_.js} +1 -1
- package/dist/public/assets/{src-CaBa9Z1L.js → src-DsJU4LsJ.js} +1 -1
- package/dist/public/assets/{stateDiagram-2N3HPSRC-QGlUFt6h.js → stateDiagram-2N3HPSRC-DEWfQHsO.js} +1 -1
- package/dist/public/assets/stateDiagram-v2-6OUMAXLB-aJyvpelO.js +1 -0
- package/dist/public/assets/{swimlanes-5IMT3BWC-BHsr6MBF.js → swimlanes-5IMT3BWC-B6x4Ld9j.js} +2 -2
- package/dist/public/assets/swimlanesDiagram-G3AALYLV-NoFAxBaw.js +8 -0
- package/dist/public/assets/switch-CsstPO-E.js +1 -0
- package/dist/public/assets/tabs-C8ykgpIi.js +1 -0
- package/dist/public/assets/tag-pill-input-7XN11_mj.js +1 -0
- package/dist/public/assets/target-navigation-intent-D2OBNu7k.js +1 -0
- package/dist/public/assets/{telemetry-impl-DV07MMfz.js → telemetry-impl-D4kQ8pzt.js} +2 -2
- package/dist/public/assets/telemetry-startup-B15S0fJ7.js +1 -0
- package/dist/public/assets/terminal-input-events-B8xUcID4.js +1 -0
- package/dist/public/assets/terminal-launch-events-nCAKTwef.js +1 -0
- package/dist/public/assets/{terminal-telemetry-CvNM4wYv.js → terminal-telemetry-vp1G0ekC.js} +1 -1
- package/dist/public/assets/textarea-DKb-eo87.js +1 -0
- package/dist/public/assets/{thread-client-CSOJeVWW.js → thread-client-KM4rZX_M.js} +1 -1
- package/dist/public/assets/{timeline-definition-FHXFAJF6-DitS4FqW.js → timeline-definition-FHXFAJF6-DB7l9JZO.js} +1 -1
- package/dist/public/assets/timeline-diff-store-C89mH-2r.js +1 -0
- package/dist/public/assets/{toggle-group-CjXmmTGy.js → toggle-group-DMfnQ5Pd.js} +1 -1
- package/dist/public/assets/tooltip-DkZ6fphS.js +1 -0
- package/dist/public/assets/{trash-2-DE3a7L75.js → trash-2-5vqPZUBk.js} +1 -1
- package/dist/public/assets/treeView-QDETBFTQ-Ds4YBLMo.js +1 -0
- package/dist/public/assets/treemap-6X3UGDF4-D2ccHx16.js +1 -0
- package/dist/public/assets/{triangle-alert-Bcc1P5yx.js → triangle-alert-BwCftF1V.js} +1 -1
- package/dist/public/assets/typing-burst-detector-DlPntV7a.js +8 -0
- package/dist/public/assets/undo-2-BRIW1mxN.js +1 -0
- package/dist/public/assets/uninstall-m1tFru3-.js +1 -0
- package/dist/public/assets/use-activity-panel--7zr9R-m.js +1 -0
- package/dist/public/assets/use-apply-config-color-theme-CFiJF3-G.js +2 -0
- package/dist/public/assets/use-collab-url-CVCbUQ9-.js +1 -0
- package/dist/public/assets/{use-live-xterm-theme-B2MdP4nP.js → use-live-xterm-theme-CAutS4BK.js} +1 -1
- package/dist/public/assets/use-open-skill-CxYgcPyr.js +1 -0
- package/dist/public/assets/use-settings-route-b4_ubAQl.js +1 -0
- package/dist/public/assets/use-skill-directory-DacYw073.js +1 -0
- package/dist/public/assets/use-skills-CQ-I1uBW.js +1 -0
- package/dist/public/assets/use-terminal-enabled-Czv-AS7W.js +1 -0
- package/dist/public/assets/use-timeline-entry-diff--zp5POjE.js +6 -0
- package/dist/public/assets/use-workspace-DoTTAGcg.js +1 -0
- package/dist/public/assets/{vennDiagram-L72KCM5P-D7jabRjK.js → vennDiagram-L72KCM5P-D6bPpaIm.js} +1 -1
- package/dist/public/assets/wardley-OPB4EBWU-JuWm1scq.js +1 -0
- package/dist/public/assets/{wardleyDiagram-EHGQE667-C3olh_ef.js → wardleyDiagram-EHGQE667-9U25ZM8P.js} +1 -1
- package/dist/public/assets/{wrench-4e3jxe5l.js → wrench-CqOvU1qQ.js} +1 -1
- package/dist/public/assets/x-C6kVbc_i.js +1 -0
- package/dist/public/assets/{xychartDiagram-FW5EYKEG-WqIWQJdh.js → xychartDiagram-FW5EYKEG-WSgFIUEO.js} +1 -1
- package/dist/public/index.html +148 -138
- package/dist/public/uninstall.html +26 -25
- package/dist/{repair-launch-json-B4Mixg6q.mjs → repair-launch-json-DKnGHC3s.mjs} +2 -2
- package/dist/{repair-mcp-configs-BY5NQYB4.mjs → repair-mcp-configs-BNqk430t.mjs} +2 -2
- package/dist/repair-skills-COiT9pxq.mjs +1 -0
- package/dist/repair-skills-HLaZ-M-Y.mjs +4 -0
- package/dist/server-lock-DTx_HmnT.mjs +1 -0
- package/dist/{server-lock-D7crxuP7.mjs → server-lock-N4bxkmqA.mjs} +2 -2
- package/dist/{src-BSwzQ3jI.mjs → src-B9fZz8CV.mjs} +6 -6
- package/dist/{src-DmtkLnli.mjs → src-BAuCUhtO.mjs} +121 -120
- package/dist/src-BldBF2Y_.mjs +1 -0
- package/dist/src-CBxmkYgG.mjs +2030 -0
- package/dist/{start-ohc8chlc.mjs → start-CGRdHb1G.mjs} +3 -3
- package/dist/start-uD8bt0wq.mjs +1 -0
- package/dist/{write-project-skill-BzhJIXSv.mjs → write-project-skill-DZsw6Rkw.mjs} +4 -4
- package/package.json +4 -4
- package/dist/assets/skills/project/references/workflow-guides.md +0 -30
- package/dist/constants-v-GqxIIS.mjs +0 -2
- package/dist/git-handle-DyS9-xsk.mjs +0 -1
- package/dist/init-C5SNm1km.mjs +0 -1
- package/dist/loader-VrQIuQYj.mjs +0 -1
- package/dist/md-manager-BWTSpVXC.mjs +0 -2
- package/dist/preview-3XOV9PP-.mjs +0 -1
- package/dist/public/assets/ActivityModeContent-BquAhT5x.js +0 -1
- package/dist/public/assets/AppMenubar-DHWqgWXl.js +0 -1
- package/dist/public/assets/CodeMirrorPropInput-DOcEkWLX.js +0 -3
- package/dist/public/assets/CopyButton-1Q6Wnnjb.js +0 -1
- package/dist/public/assets/DocumentContext-uE-Jpe8-.js +0 -38
- package/dist/public/assets/EditorModeToggle-DBmNyzRU.js +0 -2
- package/dist/public/assets/EnableSyncConfirmDialog-Dufpw3Xm.js +0 -1
- package/dist/public/assets/FeedbackForm-DuHvlb9Z.js +0 -1
- package/dist/public/assets/ManagedArtifactProperties-xXR4EKXf.js +0 -1
- package/dist/public/assets/McpConsentDialogBody-CHmK7aXE.js +0 -1
- package/dist/public/assets/PropertyPanel-C0kyK4Hh.js +0 -2
- package/dist/public/assets/SchemaConfigEditor-BFx4ZhVm.js +0 -1
- package/dist/public/assets/SettingsDialogBody-Chz13SZG.js +0 -7
- package/dist/public/assets/ShareReceiveDialog-C7_nVZOF.js +0 -1
- package/dist/public/assets/ShareReceiveMissDialog-Dv1nzqQa.js +0 -1
- package/dist/public/assets/SkillEditorActions-2WrfNbQp.js +0 -1
- package/dist/public/assets/SourceEditor-CmpVF187.js +0 -1
- package/dist/public/assets/TerminalSessionsHost-BcY906Hf.js +0 -2
- package/dist/public/assets/ThreadView-BGvk_C1z.js +0 -6
- package/dist/public/assets/TimelineDiffPane-C5gRZMQN.js +0 -2
- package/dist/public/assets/agent-diff-store-BvRAZqCN.js +0 -1
- package/dist/public/assets/agent-visibility-DJ6Bc0aU.js +0 -1
- package/dist/public/assets/architecture-TIHT7OUA-BfFQVb2N.js +0 -1
- package/dist/public/assets/arrow-up-right-obRIg3Sv.js +0 -1
- package/dist/public/assets/auth-state-cache-CEu3ZBI_.js +0 -11
- package/dist/public/assets/badge-DXHoKHez.js +0 -1
- package/dist/public/assets/button-Gol9BgNB.js +0 -1
- package/dist/public/assets/channel-D04u7HkE.js +0 -1
- package/dist/public/assets/check-GqWaoTdV.js +0 -1
- package/dist/public/assets/checkbox-BkZH9Oy1.js +0 -1
- package/dist/public/assets/chevron-left-BQ6OM94c.js +0 -1
- package/dist/public/assets/chevron-right-C8oTR6gu.js +0 -1
- package/dist/public/assets/chunk-2Q5K7J3B-Cczs20mb.js +0 -1
- package/dist/public/assets/chunk-VAUOI2AC-D9H5NlkH.js +0 -1
- package/dist/public/assets/chunk-XXDRQBXY-BjAUTr8E.js +0 -1
- package/dist/public/assets/classDiagram-OUVF2IWQ-BCgYs9Pk.js +0 -1
- package/dist/public/assets/classDiagram-v2-EOCWNBFH-BpVLL4-U.js +0 -1
- package/dist/public/assets/client-version-MIkctMik.js +0 -1
- package/dist/public/assets/collapsible-B1mS1n9y.js +0 -1
- package/dist/public/assets/config-context-D3FvmHZm.js +0 -1
- package/dist/public/assets/copy-9EDFYcyR.js +0 -1
- package/dist/public/assets/createLucideIcon-DAkhoPjT.js +0 -1
- package/dist/public/assets/cynefin-VYW2F7L2-BVFEANjh.js +0 -1
- package/dist/public/assets/dialog-6-bc7qPg.js +0 -5
- package/dist/public/assets/dist-BJa2CfR3.js +0 -1
- package/dist/public/assets/dist-BNcdLYQI.js +0 -1
- package/dist/public/assets/dist-BjDuLI_j.js +0 -1
- package/dist/public/assets/dist-D6h-uzOv.js +0 -1
- package/dist/public/assets/dist-DAU1MdSo.js +0 -1
- package/dist/public/assets/dist-DPWWCZ4h.js +0 -1
- package/dist/public/assets/dist-nHZgBxFS.js +0 -1
- package/dist/public/assets/doc-hash-BbU2eA08.js +0 -1
- package/dist/public/assets/documents-events-C-mYs64z.js +0 -1
- package/dist/public/assets/dropdown-menu-xw8WTdb-.js +0 -1
- package/dist/public/assets/es2015-BNlmLq62.js +0 -41
- package/dist/public/assets/eventmodeling-45OFAUF4-usNuB_rF.js +0 -1
- package/dist/public/assets/field-BNyAQHKf.js +0 -1
- package/dist/public/assets/file-tree-adapter-c4ru9pmD.js +0 -1
- package/dist/public/assets/file-tree-utils-Lc0SvgnU.js +0 -1
- package/dist/public/assets/flowDiagram-23GEKE2U-CDs0Vlps.js +0 -1
- package/dist/public/assets/follow-file-BVJ6G9Hs.js +0 -1
- package/dist/public/assets/form-gDsa08Xi.js +0 -1
- package/dist/public/assets/gitGraph-TEB2WS4Q-DXc_YvuI.js +0 -1
- package/dist/public/assets/globals-C_YoXwVm.css +0 -1
- package/dist/public/assets/index-DPVeWJbL.js +0 -2014
- package/dist/public/assets/info-DKCQHKI2-C0DL9Ht0.js +0 -1
- package/dist/public/assets/input-D4OPkja2.js +0 -1
- package/dist/public/assets/lint-config-client-DJg7YDu3.js +0 -1
- package/dist/public/assets/loader-circle-Cg5SU7AZ.js +0 -1
- package/dist/public/assets/markdownlint-rule-browser-6yvn3dt6.js +0 -1
- package/dist/public/assets/mermaid-GHXKKRXX-C9klxgAS.js +0 -1
- package/dist/public/assets/minus-CI_HyT1V.js +0 -1
- package/dist/public/assets/navigation-targets-DwSgIIy0.js +0 -1
- package/dist/public/assets/open-managed-artifact-tab-Dpz9X1m_.js +0 -1
- package/dist/public/assets/packet-7NZHBO7P-BpFruX6n.js +0 -1
- package/dist/public/assets/panel-BbxjQP3-.js +0 -1
- package/dist/public/assets/pending-receive-nav-store-t5K6mYGs.js +0 -1
- package/dist/public/assets/pie-RZYD4A2V-lVpCCOkJ.js +0 -1
- package/dist/public/assets/prop-types-65NJPmd-.js +0 -1
- package/dist/public/assets/radar-I7S5WNFK-Bd-i9axl.js +0 -1
- package/dist/public/assets/radio-group-CGEdWasQ.js +0 -1
- package/dist/public/assets/railroad-3IZDKUUU-D6ewe_eA.js +0 -1
- package/dist/public/assets/railroad-abnf-AHOZXSZD-DKqyYXL-.js +0 -1
- package/dist/public/assets/railroad-ebnf-EBAXGLYW-CtMezBX2.js +0 -1
- package/dist/public/assets/railroad-peg-LSFZ7HO6-DJ-63J6n.js +0 -1
- package/dist/public/assets/skeleton-Mo1oLtEu.js +0 -1
- package/dist/public/assets/skill-actions-ByBHG3Gh.js +0 -1
- package/dist/public/assets/skills-api-DWPhWBud.js +0 -1
- package/dist/public/assets/sliders-horizontal-BNv-Koqw.js +0 -1
- package/dist/public/assets/square-pen-C1vIlMAW.js +0 -1
- package/dist/public/assets/stateDiagram-v2-6OUMAXLB-D_6D-nLI.js +0 -1
- package/dist/public/assets/swimlanesDiagram-G3AALYLV-cqXTLbrM.js +0 -8
- package/dist/public/assets/switch-DYic2V-1.js +0 -1
- package/dist/public/assets/tag-pill-input-BHj4spSb.js +0 -1
- package/dist/public/assets/target-navigation-intent-B5jnqgZ_.js +0 -1
- package/dist/public/assets/telemetry-startup-Cy1VVosp.js +0 -1
- package/dist/public/assets/terminal-input-events-C5UuEsAB.js +0 -1
- package/dist/public/assets/terminal-launch-events-CtZeptxC.js +0 -1
- package/dist/public/assets/textarea-bScbzsdX.js +0 -1
- package/dist/public/assets/timeline-diff-store-BwCud4Ug.js +0 -1
- package/dist/public/assets/tooltip-B4J7VHmA.js +0 -1
- package/dist/public/assets/treeView-QDETBFTQ-CuznZlQn.js +0 -1
- package/dist/public/assets/treemap-6X3UGDF4-DCd6umeO.js +0 -1
- package/dist/public/assets/typing-burst-detector-CZREoy8B.js +0 -8
- package/dist/public/assets/uninstall-Bw4vn3K8.js +0 -1
- package/dist/public/assets/use-activity-panel-DWxDopZd.js +0 -1
- package/dist/public/assets/use-apply-config-color-theme-DSCn9I0W.js +0 -2
- package/dist/public/assets/use-collab-url-CE02D4PJ.js +0 -1
- package/dist/public/assets/use-settings-route-BX1P2p9-.js +0 -1
- package/dist/public/assets/use-terminal-enabled-BlXFMDFQ.js +0 -1
- package/dist/public/assets/use-timeline-entry-diff-BI1BVnmy.js +0 -6
- package/dist/public/assets/use-workspace-DcPrrukl.js +0 -1
- package/dist/public/assets/wardley-OPB4EBWU-DH0Qf9r4.js +0 -1
- package/dist/public/assets/workspace-paths-CU85-ZRd.js +0 -1
- package/dist/public/assets/x-Du5jsNHa.js +0 -1
- package/dist/repair-skills-BHY_AeM4.mjs +0 -4
- package/dist/repair-skills-CUT1NbJx.mjs +0 -1
- package/dist/server-lock-CG809RrD.mjs +0 -1
- package/dist/src-D4iCDwsy.mjs +0 -1
- package/dist/src-T1lGYBC1.mjs +0 -3275
- package/dist/start-btkfqkGp.mjs +0 -1
- /package/dist/public/assets/{ActivityPanelDiffView-DYFlG61N.js → ActivityPanelDiffView-ZX0cv7Dl.js} +0 -0
- /package/dist/public/assets/{__vite-browser-external-z7jTWlYs.js → __vite-browser-external-DwydhYHF.js} +0 -0
- /package/dist/public/assets/{agent-presence-BdWbAeV-.js → agent-presence-BcWu61SE.js} +0 -0
- /package/dist/public/assets/{array-CC6md2n_.js → array-DpLqdF3L.js} +0 -0
- /package/dist/public/assets/{chunk-KEIR6QF5-BppCe61B.js → chunk-KEIR6QF5-Bf0oDx3Z.js} +0 -0
- /package/dist/public/assets/{chunk-Y2CYZVJY-CP7lNZai.js → chunk-Y2CYZVJY-PbmsUfAu.js} +0 -0
- /package/dist/public/assets/{clike-BAopx-wt.js → clike-BrXLgO2o.js} +0 -0
- /package/dist/public/assets/{clipboard-adapter-ZCy01ehf.js → clipboard-adapter-B3lKEXcw.js} +0 -0
- /package/dist/public/assets/{colors-QyrgP4ww.js → colors-B-WRw0bG.js} +0 -0
- /package/dist/public/assets/{copilot-BiqH8PgI.js → copilot-BkvifxDd.js} +0 -0
- /package/dist/public/assets/{cursor-BDHSyD-9.js → cursor-D-FuCbK1.js} +0 -0
- /package/dist/public/assets/{cytoscape.esm-Ci36Fm6r.js → cytoscape.esm-BkIkmBTc.js} +0 -0
- /package/dist/public/assets/{defaultLocale-ByXO85kN.js → defaultLocale-DoD61tXl.js} +0 -0
- /package/dist/public/assets/{desktop-bridge-types-DHaZbwZ0.js → desktop-bridge-types-5ScET3Cg.js} +0 -0
- /package/dist/public/assets/{diff-KHO8LkSI.js → diff-DTEjW6Ec.js} +0 -0
- /package/dist/public/assets/{dist-B8I5m7M1.js → dist-BVbCw0G-.js} +0 -0
- /package/dist/public/assets/{dist-Cljnhi3D.js → dist-CA7QPULb.js} +0 -0
- /package/dist/public/assets/{dist-DFt8VaPU.js → dist-CF921uP8.js} +0 -0
- /package/dist/public/assets/{dist-Bpk5HQQh.js → dist-D4eaXg-1.js} +0 -0
- /package/dist/public/assets/{dist-BCZq3DKc.js → dist-DuwTJb1j.js} +0 -0
- /package/dist/public/assets/{documents-fetch-Db-Ikele.js → documents-fetch-AfOPbdF_.js} +0 -0
- /package/dist/public/assets/{external-link-Ct0_ujyY.js → external-link-LAxhzgCI.js} +0 -0
- /package/dist/public/assets/{file-tree-rename-validation-DDA1ck2Y.js → file-tree-rename-validation-CkkVvtpx.js} +0 -0
- /package/dist/public/assets/{floating-ui.dom-DxCSXcm6.js → floating-ui.dom-DQ0F0qgY.js} +0 -0
- /package/dist/public/assets/{format-4tjAvLkN.js → format-Bj7zR862.js} +0 -0
- /package/dist/public/assets/{go-7c8IMl4m.js → go-D3-a1upg.js} +0 -0
- /package/dist/public/assets/{init-CL1Yxhhi.js → init-D0AX7DDe.js} +0 -0
- /package/dist/public/assets/{isObject-5PVyZ800.js → isObject-Bs1dF4ay.js} +0 -0
- /package/dist/public/assets/{katex-BlgnTlTx.js → katex-DGLcd7nU.js} +0 -0
- /package/dist/public/assets/{lib-Iu39CNZE.js → lib-RJCjKODX.js} +0 -0
- /package/dist/public/assets/{libesm-WVpTb_tB.js → libesm-D5Z2fjiR.js} +0 -0
- /package/dist/public/assets/{lint-plugin-meta-BoxMoaxR.js → lint-plugin-meta-DEfDN-Lf.js} +0 -0
- /package/dist/public/assets/{lru-string-cache-7Y9kMeow.js → lru-string-cache-CHVwK1CS.js} +0 -0
- /package/dist/public/assets/{lua-DnREcbBQ.js → lua-B71IklsF.js} +0 -0
- /package/dist/public/assets/{markdownit-YwcN3EvW.js → markdownit-BIJhOARi.js} +0 -0
- /package/dist/public/assets/{mcp-consent-store-CDAQY6Np.js → mcp-consent-store-B7QM8uoo.js} +0 -0
- /package/dist/public/assets/{min-DVq-2erP.js → min-nSRrTGDE.js} +0 -0
- /package/dist/public/assets/{overlay-layers-Dhz8IqAf.js → overlay-layers-cTOQ-1PW.js} +0 -0
- /package/dist/public/assets/{panzoom.es-D0o6IaL6.js → panzoom.es-D_Inq3Bn.js} +0 -0
- /package/dist/public/assets/{parse-api-error-BtEL2kxi.js → parse-api-error-CqQte8A1.js} +0 -0
- /package/dist/public/assets/{path-BGTOauh6.js → path-rUjnF-It.js} +0 -0
- /package/dist/public/assets/{pdf-DLVdEoR9.js → pdf-B6i840eQ.js} +0 -0
- /package/dist/public/assets/{pdf.worker-Cuhr1SjJ.js → pdf.worker-BVtQmJKT.js} +0 -0
- /package/dist/public/assets/{perl-D6YK7dbe.js → perl-B5Ul8OcV.js} +0 -0
- /package/dist/public/assets/{properties-BPzWpIa7.js → properties-CWbs0haa.js} +0 -0
- /package/dist/public/assets/{r-tzVlUzeq.js → r-DcrAlDW2.js} +0 -0
- /package/dist/public/assets/{rough.esm-kQd3CdGR.js → rough.esm-BfebUORF.js} +0 -0
- /package/dist/public/assets/{ruby-_eAC-08N.js → ruby-i1xYQ9jV.js} +0 -0
- /package/dist/public/assets/{share-metadata-rows-Ds3RIKZ4.js → share-metadata-rows-aPZCgxxk.js} +0 -0
- /package/dist/public/assets/{shell-CRkrz4LQ.js → shell-cUw_P8eQ.js} +0 -0
- /package/dist/public/assets/{sortable.esm-_jt9EfAF.js → sortable.esm-ByX1chKY.js} +0 -0
- /package/dist/public/assets/{sql-BtxU5QDI.js → sql-xiwUJ94E.js} +0 -0
- /package/dist/public/assets/{src-BJaEWo8x.js → src-DkpCd49O.js} +0 -0
- /package/dist/public/assets/{startup-marks-CyxDWRgR.js → startup-marks-BHZdrXwz.js} +0 -0
- /package/dist/public/assets/{stex-EWGki41Z.js → stex-rJmw0eOd.js} +0 -0
- /package/dist/public/assets/{swift-BmtuXdIg.js → swift-Cl1DeyT6.js} +0 -0
- /package/dist/public/assets/{thread-draft-staging-CKJIG41d.js → thread-draft-staging-t1CtDp8W.js} +0 -0
- /package/dist/public/assets/{toml-yD0H4nkp.js → toml-B2JpJCpy.js} +0 -0
- /package/dist/public/assets/{trace-api-DHyWZzIa.js → trace-api-C3cW9MnH.js} +0 -0
- /package/dist/public/assets/{use-installed-clis-8r2iSkgN.js → use-installed-clis-BR1AXhaE.js} +0 -0
- /package/dist/public/assets/{useLintConfigViewMode-CyzSEZ5z.js → useLintConfigViewMode-eMibVVkV.js} +0 -0
- /package/dist/public/assets/{w3c-keyname-DtWCia6R.js → w3c-keyname-DKgbz_c6.js} +0 -0
- /package/dist/public/assets/{worktree-store-B-NxI13K.js → worktree-store-Cn9IFis3.js} +0 -0
|
@@ -3,7 +3,6 @@ name: open-knowledge
|
|
|
3
3
|
description: "Authoritative agent-runtime contract for working inside an OpenKnowledge project — a markdown-CRDT knowledge base exposed over MCP. Use whenever reading, listing, searching, editing, or linting any `.md` or `.mdx` file in the project, and before any `mcp__open-knowledge__*` tool call (`exec`, `search`, `write`, `edit`, `lint`, and the rest). Installed by `ok init`, so its presence means this is an OpenKnowledge project and it governs every markdown file here. Covers the read/write tool surface, grounding and linking rules, folder/template conventions, the live browser preview, and the rule that OK's MCP tools — never native file tools — handle in-scope markdown."
|
|
4
4
|
compatibility: "Claude Code, Claude Desktop, Claude Cowork, Claude.ai web. Requires OpenKnowledge MCP server + code execution."
|
|
5
5
|
metadata:
|
|
6
|
-
version: "0.46.0-beta.7"
|
|
7
6
|
author: "Inkeep"
|
|
8
7
|
repository: "https://github.com/inkeep/open-knowledge"
|
|
9
8
|
---
|
|
@@ -19,17 +18,16 @@ OpenKnowledge (OK) is a markdown-CRDT collaboration platform exposed via MCP. Th
|
|
|
19
18
|
|
|
20
19
|
1. **Reads:** `exec("cat …")` for one doc, `exec("ls -A …")` for a directory (folder defaults + template menu), `exec("grep …")` for literal, `search` for ranked retrieval. Native `Read` / `Grep` only on source code (`.ts` / `.py` / …), never on in-scope `.md` / `.mdx`.
|
|
21
20
|
2. **Writes:** `write({ document: { path, content } })` for a new or full-replace doc; `edit({ document: { path, find, replace } })` for a body find/replace; `edit({ document: { path, frontmatter } })` for a frontmatter merge-patch (`null` deletes a key). `delete({ document })` removes, `move({ from, to })` moves/renames. Body find/replace is body-only. Pass a one-line `summary` (≤80 chars, user-facing outcome) on every content write.
|
|
22
|
-
3. **Preview / open a doc — determine your ONE surface FIRST (once per session).**
|
|
23
|
-
4. **
|
|
21
|
+
3. **Preview / open a doc — determine your ONE surface FIRST (once per session).** Stop at first match: **`OK_DESKTOP_TERMINAL` set** → OK Desktop's terminal → `ok open <name>` (switches this window) · in-app browser (Claude Code Desktop's Browser pane, Cursor, Codex) → `preview_url`, then open/navigate it to the doc · else plain CLI → `ok open <name>`. `ok open <name>` opens a doc or folder (auto-detected); `--skill <name>` for a skill. The `previewUrl` field is a route id, **not** your open mechanism. Don't `preview_screenshot` to confirm edits. Full Step-0 procedure + per-surface how-to: `references/preview.md`.
|
|
22
|
+
4. **Knowledge layers:** capturing a source (ingest), synthesizing findings (research), promoting a decision (consolidate) — procedures, **not tool calls**; there is no `ingest` tool. Ingest ships here (`references/ingest-and-sources.md`); research + consolidate come with the `knowledge-base` pack. Layer model + packs: `references/starter-packs.md`.
|
|
24
23
|
5. **Direct questions:** a plain business question ("which customers…", "what did we decide about…") routes to `search` / `exec` + a cited chat answer — no "research" keyword needed. Persist only when durable + multi-doc + not already covered, and *offer* first. See `references/corpus-qa.md`.
|
|
25
|
-
6. **Authoring or improving a skill** ("write/make a skill", "improve this skill", "turn this into a skill"): STOP and invoke the **`open-knowledge-write-skill`** skill — it owns scope choice (project vs global), the SKILL.md contract, evaluation, and install; don't improvise
|
|
24
|
+
6. **Authoring or improving a skill** ("write/make a skill", "improve this skill", "turn this into a skill"): STOP and invoke the **`open-knowledge-write-skill`** skill — it owns scope choice (project vs global), the SKILL.md contract, evaluation, and install; don't improvise here. Author through the `skill` target (`write({ skill })`), never a raw path document. Skills are REAL folders under the editor dirs' `skills/` (`.claude` · `.cursor` · `.codex` · `.opencode` · `.pi` · `.agents`): ONE is the source, the rest are managed copies/symlinks. **Read and edit via the tools (`skills`, `edit({ skill })`) — they route to the source.** Never hand-edit a non-source copy: unedited copies refresh from the source, and editing one forks it into its own skill that stops refreshing.
|
|
26
25
|
|
|
27
26
|
## Tool index — 21 tools (router; the MCP tool descriptions carry each tool's full contract)
|
|
28
27
|
|
|
29
|
-
- **Reads** — `exec` (primary; read-only `cat`/`ls`/`grep
|
|
30
|
-
- **Writes** — four native CRUD verbs, polymorphic over `document` / `folder` / `template` / `skill` / `asset` (pass EXACTLY ONE target, nested under its address key): `write` (create/overwrite; `write({ skill: {
|
|
28
|
+
- **Reads** — `exec` (primary; read-only `cat`/`ls`/`grep`/… plus frontmatter/backlink/history enrichment; one command or one pipe, not a shell), `search` (ranked BM25 + recency), `history` (doc versions), `links` (`kind: backlinks|forward|dead|orphans|hubs|suggest`, or an array for one call), `skills` (search + read: `query` → skills.sh; omit `name` to LIST managed (Project + Global); `name` READs one — by `name`+`scope`, never path), `config` (resolved config), `palette` (authoring forms + `html preview` starters + theme tokens; `palette({ components })` for JSX schemas), `preview_url` (browser preview URL on demand), `share_link` (GitHub-substrate share URL; read-only, errors without a GitHub remote), `lint` (markdown-lint violations: `document` for one doc, omit for the project; `fix: true` with `document` auto-fixes fixable rules in place — attributed, live in the preview; the rest need `edit`/`write`), `audit` (every lint violation + broken internal link in one read-only report, by source file with lines; `path` scopes; for link VALIDATION use this, not `links`).
|
|
29
|
+
- **Writes** — four native CRUD verbs, polymorphic over `document` / `folder` / `template` / `skill` / `asset` (pass EXACTLY ONE target, nested under its address key): `write` (create/overwrite; `write({ skill: {…} })` authors a skill as a REAL folder at the project's default skill home — live immediately for that folder's agent), `edit` (body find/replace/frontmatter merge-patch; no asset), `delete` (remove), `move` (move/rename, rewrites referrers; a skill also takes `scope`/`toScope` for Project↔Global — history resets, re-`install`). Output mirrors the input key; the preview envelope (`previewUrl`, `warning`) stays top-level. Plus `install` (WHERE a `skill` lives: `add`/`remove` locations additively — editor ids, `agents`, or custom roots; `mode` + `convert` re-form ONLY the locations named; `source` moves the real folder. The source folder IS the skill — no "uninstall everywhere"; a skill dies only via `delete`), `import` (acquire a skill-dir into `add`'s locations; scripts never run), `checkpoint` (named version), and `restore_version` (roll back). A folder's frontmatter is open-shape and self-only (does NOT cascade); templates are what new docs start with.
|
|
31
30
|
- **Conflicts** — `conflicts` (`kind: list|content`), `resolve_conflict` (write a resolution + commit; destructive). See `references/conflict-resolution.md`.
|
|
32
|
-
- **Workflow** — `workflow` (`kind: ingest|research|consolidate|discover`; procedural guides, not data). See `references/workflow-guides.md`.
|
|
33
31
|
|
|
34
32
|
**Self-correcting on misuse:** constraints JSON Schema can't express ("exactly one target", "`find` needs a `replace`", body-XOR-frontmatter) return `isError: true` with a one-line corrective shape. Read it and retry with that shape; don't guess.
|
|
35
33
|
|
|
@@ -44,11 +42,9 @@ Tools NOT in OK MCP (your host's): `preview_start`, `preview_screenshot`, `WebFe
|
|
|
44
42
|
- **Glob patterns that target markdown** (`**/*.md`, `specs/**`, `reports/**`, `docs/**`) — use `exec` with `find` or `exec("ls -A <dir>")`.
|
|
45
43
|
- **Dispatching the Explore / general-purpose subagent for markdown-heavy exploration** — subagents use native tools internally and bypass OK. Do markdown exploration yourself via `exec` / `search`. Subagents remain appropriate for **source-code** exploration.
|
|
46
44
|
- **Native `Read` / `Grep` on in-scope markdown inside `.ok/`** — `.ok/` is in-scope; treat its `.md` / `.mdx` like any other KB file.
|
|
47
|
-
- **`ls` / `cat` / `find` on
|
|
45
|
+
- **`ls` / `cat` / `find` on skill folders to discover or read a skill** — skills are addressed by `name`+`scope`, not by path (a skill can live in any editor dir, the `.agents/skills/` hub, or a custom root, with copies elsewhere). Use the `skills` tool.
|
|
48
46
|
|
|
49
|
-
**
|
|
50
|
-
|
|
51
|
-
**Your initial tool list is NOT exhaustive — run tool discovery before concluding the MCP is missing.** Some clients (notably Codex) defer MCP tools behind a lazy `tool_search` / tool-discovery step, so `mcp__open-knowledge__*` is absent from the upfront tool set and only appears after you search for it. Absence from the visible list means "I have not discovered it yet," NOT "it is not registered." If you don't see the tools, your first move is to run your client's tool-discovery / `tool_search` for `open-knowledge` (or `exec` / `search` / `write`) — do not infer unavailability from the initial list.
|
|
47
|
+
**Not seeing `exec` is NOT the escape hatch.** Wiring, labels, and tool visibility vary by client; some (notably Codex) defer MCP tools behind lazy discovery. Registration is the test, not top-level-symbol visibility — run tool discovery for `open-knowledge` first. Detail: `references/setup.md`.
|
|
52
48
|
|
|
53
49
|
**Escape hatch.** Native `Read` / `Grep` / `Glob` on `.md` / `.mdx` is allowed **only** when, after running tool discovery (above), no OpenKnowledge MCP server is registered for this project, **or** immediately after you actually invoked an MCP call and it failed — then begin a user-visible sentence with `OpenKnowledge MCP unavailable:`. "Not registered" is a conclusion you may only reach after tool discovery turned it up empty — never from the initial tool list alone. Never use the hatch because you skipped your client's MCP path, didn't see `exec` as a top-level tool, didn't run tool discovery, or rationalized the skill wasn't necessary.
|
|
54
50
|
|
|
@@ -67,19 +63,20 @@ Call `write` / `edit` as soon as you have content (route through MCP per the STO
|
|
|
67
63
|
|
|
68
64
|
**Persist incrementally — the knowledge base IS your checkpoint (MUST).** On any multi-step or long-running task — a research sweep, a multi-source synthesis, a batch of docs — write completed work to the KB as you finish each unit: per section, per source, per doc. Never hold finished findings only in your context waiting for one final write at the end. A rate limit, crash, or context compaction mid-task discards everything still unwritten; work already persisted survives, and you resume by reading the doc back. Create the target doc early (skeleton + frontmatter), then `edit` each section in as it firms up.
|
|
69
65
|
|
|
70
|
-
**Pass a `summary` on every content write (SHOULD)** — a one-line (≤80
|
|
66
|
+
**Pass a `summary` on every content write (SHOULD)** — a one-line (≤80 char) user-facing note; it becomes the timeline entry. **Reach for visual structure** (Callout, `mermaid`, table, `html preview`) where it carries the point better than prose; call `palette` as you draft. Advisory write-warnings, MDX authoring, delete/move mechanics, and visual authoring: `references/writing.md` + `references/components-and-visuals.md` + `references/media-and-assets.md`.
|
|
71
67
|
|
|
72
68
|
## Grounding — every factual claim needs a source (MUST)
|
|
73
69
|
|
|
74
|
-
|
|
70
|
+
KB docs are factual artifacts: every claim traceable, and **the source lives inside the knowledge base**, not on the public web.
|
|
75
71
|
|
|
76
|
-
|
|
77
|
-
- **Every factual claim MUST cite its source at the point of claim.** No unsourced speculation.
|
|
78
|
-
- **Web sources for KB docs** → fetch the page (host `WebFetch` / `WebSearch`), then `ingest` it as a local doc, then cite the local path: `[source name](./path/to/source.md)` (the local doc carries the URL in `source_url:`). Inline `[source](URL)` is a chat affordance, not a KB one.
|
|
79
|
-
- **Self-fetched counts.** When YOU fetched a URL to ground a claim landing in the KB, that fetch triggers `ingest` exactly like a user share — don't downgrade to inline-URL citation because the fetch was agent-initiated.
|
|
80
|
-
- **Internal cross-refs** → standard markdown link to the OK doc with the authoritative claim; that doc must cite its own sources (chains terminate in preserved local docs).
|
|
81
|
-
- **If you don't have evidence:** run a web search and `ingest` it, OR mark inline `(TODO: needs source)`, OR don't write the claim. Do NOT fabricate. Unsourced speculation rots into untraceable tribal knowledge.
|
|
72
|
+
**Ingest is a procedure, not a tool** — binary-vs-text classification, SSRF-safe fetch flags, size + executable gates, wrapper frontmatter — in [`references/ingest-and-sources.md`](references/ingest-and-sources.md). Read it before your first capture; a naive fetch-and-paste skips every gate.
|
|
82
73
|
|
|
74
|
+
- **Closed loop.** External sources are pulled in by the ingest procedure, then cited locally. A bare `[source](https://...)` inside a KB doc is **not** a citation — it is a TODO meaning "still needs ingesting". The chain only works if every leaf is a local doc.
|
|
75
|
+
- **Every factual claim MUST cite its source at the point of claim.** No unsourced speculation.
|
|
76
|
+
- **Web sources** → fetch the page (host `WebFetch` / `WebSearch`), ingest it, then cite the path: `[source name](./path/to/source.md)` (the local doc carries `source_url:`). Inline `[source](URL)` is a chat affordance, not a KB one.
|
|
77
|
+
- **Self-fetched counts.** A URL YOU fetched to ground a claim gets the same ingest — no inline-URL downgrade.
|
|
78
|
+
- **Internal cross-refs** → link the OK doc holding the authoritative claim; that doc cites its own sources (chains terminate in preserved local docs).
|
|
79
|
+
- **No evidence?** Search and ingest the result, OR mark `(TODO: needs source)`, OR don't write the claim. Do NOT fabricate — unsourced speculation rots into untraceable tribal lore.
|
|
83
80
|
## Linking — standard markdown links (MUST)
|
|
84
81
|
|
|
85
82
|
Link every noun-phrase that names another document — `[text](./relative/path.md)` — and link liberally. **Every link must resolve to a doc that exists by the time you're done** (a same-pass forward-reference you create later in the pass is fine; for one that genuinely won't exist, leave the mention as plain prose + a tracked task). Never backtick a link (`` `[text](./foo.md)` `` is a bug) and never use HTML `<a>`. **Read `brokenLinks` on every `write`/`edit` response: `[]` means all links resolve; a populated list names each broken `href` + `reason` (`no-such-doc` / `no-such-file` / `unresolvable`) — fix them in a follow-up `edit`.** `audit` is the authoritative end-state link check (the editor's red-underline is slug-tolerant and lies, so trust the tool). External web sources are NOT inline body links (see Grounding). Full rule set + the `[[Page]]` legacy note: `references/linking.md`.
|
|
@@ -88,7 +85,7 @@ Link every noun-phrase that names another document — `[text](./relative/path.m
|
|
|
88
85
|
|
|
89
86
|
Every `.md` / `.mdx` needs YAML frontmatter — `title` + `description` required, `tags` recommended. Two **opt-in, nested** folder mechanisms: folder frontmatter (`<folder>/.ok/frontmatter.yml` — the folder's own open-shape properties; self-only, does NOT cascade into child docs) and templates (`<folder>/.ok/templates/` — what new docs start with). Most folders have NO `.ok/`. A doc's frontmatter is exactly its own on-disk YAML. Structural model + the full pre-write checklist: `references/folder-model.md`. Template authoring + folder editing: `references/template-authoring.md`. Frontmatter-vs-body edit rules: `references/doc-editing.md`.
|
|
90
87
|
|
|
91
|
-
- **Read the folder before writing (MUST).** Before creating/editing docs in a folder, call `exec("ls -A <folder>")` once per folder per session — it returns the folder's `title`/`description`/`tags` + `templates_available`. Skipping it lands docs that violate folder discipline. (If a folder has no frontmatter AND no templates AND the repo has substantial content elsewhere, it isn't onboarded —
|
|
88
|
+
- **Read the folder before writing (MUST).** Before creating/editing docs in a folder, call `exec("ls -A <folder>")` once per folder per session — it returns the folder's `title`/`description`/`tags` + `templates_available`. Skipping it lands docs that violate folder discipline. (If a folder has no frontmatter AND no templates AND the repo has substantial content elsewhere, it isn't onboarded — run `references/onboard-existing-repo.md` first.)
|
|
92
89
|
- **Use a template when one fits (MUST).** Instantiate via `write({ document: { path, template } })`; inherited templates count. Skip only when none match or the user asked for free-form (note why in chat). Create templates proactively when a shape recurs.
|
|
93
90
|
- **When recurring per-doc properties emerge (MUST).** Writing the same frontmatter on multiple siblings → bake those starting values into a template (`write({ template })`). Folder frontmatter does not cascade values into docs.
|
|
94
91
|
|
|
@@ -104,26 +101,28 @@ Projects with GitHub sync may carry docs in merge-conflict state; mutating calls
|
|
|
104
101
|
| Explore a markdown-heavy dir | `Agent(Explore)` (bypasses OK) | `exec`/`search` yourself |
|
|
105
102
|
| Reference another doc | `` `[text](./p.md)` `` (backticked) or HTML `<a>` | `[text](./p.md)` |
|
|
106
103
|
| Embed an image | `<img>`, a `localhost`/`preview_url` URL, hot-link | save locally + `` |
|
|
107
|
-
| Factual claim in a KB doc | prose with no citation, OR inline `[src](https://…)` |
|
|
104
|
+
| Factual claim in a KB doc | prose with no citation, OR inline `[src](https://…)` | ingest the source (`references/ingest-and-sources.md`), cite the local path |
|
|
108
105
|
| Confirm an edit landed | `preview_screenshot` / verification loop | trust the CRDT tool response |
|
|
109
106
|
| Delete a markdown doc | `Bash: rm` / native deletion | `delete({ document })` (`checkpoint()` first if risky) |
|
|
110
107
|
| Write in an unfamiliar folder | straight to `write` | `exec("ls -A <folder>")` first |
|
|
111
108
|
|
|
112
109
|
Full table: `references/anti-patterns.md`.
|
|
113
110
|
|
|
114
|
-
##
|
|
111
|
+
## Knowledge layers — the shape most KB work takes
|
|
115
112
|
|
|
116
|
-
|
|
113
|
+
Three recurring practices, not tool calls — each a full procedure that ships as skill guidance.
|
|
114
|
+
|
|
115
|
+
| Layer | When | Procedure |
|
|
116
|
+
| --- | --- | --- |
|
|
117
|
+
| **ingest** | Preserve a shared URL/PDF/file verbatim, or you fetched a URL to ground a claim (binary sources preserved, not scraped). | `references/ingest-and-sources.md` — ships here, §Grounding depends on it |
|
|
118
|
+
| **research** | Investigate / compare / synthesize sources → `status: provisional` article + `sources:`. | `open-knowledge-pack-knowledge-base-research` skill |
|
|
119
|
+
| **consolidate** | A decision was made → canonical source-of-truth with a `supersedes:` chain. | `open-knowledge-pack-knowledge-base-consolidate` skill |
|
|
117
120
|
|
|
118
|
-
|
|
119
|
-
| --- | --- |
|
|
120
|
-
| `ingest` | Preserve a shared URL/PDF/file verbatim, OR you fetched a URL to ground a KB claim (binary sources preserved, not scraped). |
|
|
121
|
-
| `research` | Investigate / compare / synthesize multiple sources → `status: provisional` article + `sources:`. |
|
|
122
|
-
| `consolidate` | A decision was actually made → commit canonical source-of-truth with a `supersedes:` chain. |
|
|
123
|
-
| `discover` | First arrival at a repo with existing content and no folder frontmatter/templates → extract conventions, activate the link graph. |
|
|
121
|
+
Research and consolidate arrive with `ok seed --pack knowledge-base`. **Without that pack you do not have those procedures** — don't improvise one; do the work as an ordinary grounded `write`, or offer to seed it (`ok seed --pack knowledge-base --dry-run` shows what it would add).
|
|
124
122
|
|
|
125
|
-
Don't chain silently
|
|
123
|
+
Don't chain silently: let the user drive ingest → research → consolidate, and a procedure's STOP gates override session-level "don't stop to ask" hints. After any turn that changes KB content, check for a `log.md` and follow its contract (`references/cadence-and-logs.md`). Interleave a multi-doc batch so the preview shows narrative progress.
|
|
126
124
|
|
|
125
|
+
Onboarding a repo that already has content: `references/onboard-existing-repo.md`. Layer model + packs: `references/starter-packs.md`.
|
|
127
126
|
## Server lifecycle
|
|
128
127
|
|
|
129
128
|
If `write` / `edit` returns `"Hocuspocus server is not running"`, run `ok start` (via Bash) and retry. Never fall back to native `Edit` / `Write` for in-scope markdown.
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
| Add an image | empty alt `` or generic alt `` | meaningful alt + source caption below |
|
|
24
24
|
| Catalog folder contents | create `INDEX.md` hub file | `edit({ folder: { path, frontmatter } })` writes `<folder>/.ok/frontmatter.yml` |
|
|
25
25
|
| Write a doc in an unfamiliar folder | go straight to `write` with hand-authored markdown | `exec("ls -A <folder>")` first — read the folder description + `templates_available` before writing |
|
|
26
|
-
| Land in an existing repo without orienting | go straight to `write` when no folder frontmatter / templates exist |
|
|
26
|
+
| Land in an existing repo without orienting | go straight to `write` when no folder frontmatter / templates exist | run `onboard-existing-repo.md` once for the project — extracts conventions from siblings, sets folder frontmatter + templates, activates the link graph |
|
|
27
27
|
| Author a doc when a matching template exists | `write({ document: { path, content: "..." } })` from scratch | `write({ document: { path, template } })` — templates carry the folder's frontmatter + body discipline |
|
|
28
28
|
| Change a doc's title / tags | `edit({ document: { path, find, replace } })` to swap the YAML (rejected — HTTP 400 frontmatter-intersect) | `edit({ document: { path, frontmatter } })` for metadata; `write({ document: { path, content, frontmatter, position: "replace" } })` for full rewrites |
|
|
29
29
|
| Repeat the same frontmatter on sibling docs | hand-set identical `tags` / `title` prefix on every new file | `write({ template })` once — new docs start from the template |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Answering direct questions from the corpus
|
|
2
2
|
|
|
3
|
-
A direct question you can answer from existing documents — "which customers have non-standard indemnity?", "can we use Alloy's logo?", "what did we decide about X?" — does **not** need the words "research" or "report" to route here. Retrieve with `search` / `exec`, read the relevant docs, and **answer in chat with inline citations to the source docs you used**. That is the complete, correct default — most questions end here. This is NOT
|
|
3
|
+
A direct question you can answer from existing documents — "which customers have non-standard indemnity?", "can we use Alloy's logo?", "what did we decide about X?" — does **not** need the words "research" or "report" to route here. Retrieve with `search` / `exec`, read the relevant docs, and **answer in chat with inline citations to the source docs you used**. That is the complete, correct default — most questions end here. This is NOT the **research** layer: research gathers and synthesizes *external* sources behind a scoping gate; a corpus question just reads what the knowledge base already holds. (Inside an active research pass, research's own "file valuable Q&A back" step governs how answers are persisted — not this section.)
|
|
4
4
|
|
|
5
5
|
**Offer to persist the answer only when it is durable knowledge the KB is currently missing** — when ALL of these hold:
|
|
6
6
|
|
|
@@ -33,7 +33,7 @@ A doc's frontmatter is exactly its own on-disk YAML — folder frontmatter never
|
|
|
33
33
|
|
|
34
34
|
Before creating or editing docs in a folder, **always** call `exec("ls -A <folder>")` once. The response carries the folder's own `title`/`description`/`tags` + `templates_available` (the template menu for `write({ document: { template } })`). Skipping this is how agents land docs that violate folder discipline.
|
|
35
35
|
|
|
36
|
-
0. **First-contact check.** If the folder has no frontmatter of its own AND `templates_available` is empty AND `exec("ls -A")` shows substantial content elsewhere, the project hasn't been onboarded — STOP and
|
|
36
|
+
0. **First-contact check.** If the folder has no frontmatter of its own AND `templates_available` is empty AND `exec("ls -A")` shows substantial content elsewhere, the project hasn't been onboarded — STOP and run `onboard-existing-repo.md`. Skip on subsequent writes once confirmed.
|
|
37
37
|
1. **Read the folder's description** — its `title`/`description`/`tags` tell you what the folder is for. (These describe the folder; they are NOT defaults the doc inherits.)
|
|
38
38
|
2. **Read `templates_available`** — each entry has `name`, `title`, `description`, `scope` (`local` / `inherited`). If one matches, **prefer it** over free-form markdown (it's the folder's contract — templates carry frontmatter + body structure hand-authored docs routinely miss).
|
|
39
39
|
3. **Read recent siblings** — new docs should match the shape of existing ones (filename, frontmatter, body structure).
|
|
@@ -1,24 +1,241 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Ingest — capture an external source as raw reference material
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Capture an external source into the knowledge base as raw reference material. The KB is **closed-loop**: external sources are pulled IN so downstream docs cite local paths, never bare web URLs. This applies whether a user shared the source OR you fetched it yourself to ground a claim — agent-initiated fetches are not exempt (core §Grounding). **Raw preservation only** — no summary, no analysis, no interpretation.
|
|
4
|
+
|
|
5
|
+
**Bias toward binary preservation.** When the source is a binary file (PDF, image, audio, video, Office doc, archive, dataset), preserve the raw bytes — do NOT settle for a text scrape. OK ships a complete asset-embed surface (`![[file.ext]]` wiki-embed, file-watcher pickup, sha256 dedup, blocked-extension enforcement); this procedure bridges the source to it via your shell tool.
|
|
6
|
+
|
|
7
|
+
Sources land under `external-sources/` when the project has that folder (the `knowledge-base` starter pack's raw layer); otherwise pick the project's equivalent and stay consistent. Paths below are relative to the resolved `content.dir` (`config({ key: 'content.dir' })`).
|
|
8
|
+
|
|
9
|
+
## Step 0: Is this source worth preserving?
|
|
10
|
+
|
|
11
|
+
Before fetching anything, sanity-check:
|
|
12
|
+
|
|
13
|
+
- **Is it in scope?** If the source is unrelated to what this knowledge base is accumulating, ingest is pollution. Check the existing layout: `exec("ls -A <content-dir>")`.
|
|
14
|
+
- **Is it already ingested?** `exec("grep -rln <source-url-or-title-slug> <content-dir>")` — if the same source is already present with current content, stop and reuse. Re-ingest is appropriate when the source changed materially — see Step 5 for sha256-mismatch semantics.
|
|
15
|
+
- **Is the intent actually preservation or analysis?** If the user wants findings synthesized rather than raw bytes archived, redirect to a research pass (which captures sources as needed). Don't pre-ingest speculatively.
|
|
16
|
+
|
|
17
|
+
If all three checks pass, proceed.
|
|
18
|
+
|
|
19
|
+
### Shell-capability self-detection (evaluate before any shell call)
|
|
20
|
+
|
|
21
|
+
If your host does not expose a shell-like tool (no Bash / Terminal / shell-exec / equivalent), you cannot run `curl` for either the HEAD probe (Step 1a) or the binary download (Step 1b). Detect once at the start via a trivial probe (`echo ok` via the host's shell affordance, or a known-safe `which curl` invocation). On absence of a shell tool, route the source straight to **Step 1c (text fetch / shell-less fallback)** — skipping Step 1a's HEAD-tiebreaker classification and Step 1b's binary download entirely — and surface the degradation explicitly to the user.
|
|
22
|
+
|
|
23
|
+
## Step 1a: Detect source kind (binary vs text)
|
|
24
|
+
|
|
25
|
+
Classify the source before fetching. **`.svg` is intentionally absent from the binary-extension list — SVG can contain scripts and is treated as a scripted-document extension; see Step 1b's executable hard-block.**
|
|
26
|
+
|
|
27
|
+
- **URL with a binary file extension** (`.pdf`, `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.mp4`, `.webm`, `.mov`, `.m4v`, `.mp3`, `.wav`, `.ogg`, `.m4a`, `.flac`, `.docx`, `.xlsx`, `.pptx`, `.doc`, `.xls`, `.ppt`, `.zip`, `.7z`, `.tar`, `.gz`, `.rar`, `.csv`, `.tsv`, `.epub`, etc.) → treat as **binary**. Skip to Step 1b.
|
|
28
|
+
- **URL with a clear HTML/text extension** (`.html`, `.htm`, none, `.txt`, `.md`) → treat as **text**. Skip to Step 1c. The executable hard-block does NOT apply here because Step 1c never writes the source extension to disk — it writes a `.md` wrapper containing the extracted text.
|
|
29
|
+
- **Local file path** → use your native file read tool. If the local file is text (HTML, plain, markdown), skip to **Step 2b** (text wrapper). If it is a binary you want preserved verbatim, you already have the bytes on disk — skip Step 1b's download and go to **Step 2a** (binary wrapper), pointing `source_path:` at the existing local path (relative to the wrapper).
|
|
30
|
+
- **Ambiguous URL** (no extension, query-string download URL, redirect-y link) → run `curl -IL --proto =http,=https --proto-redir =http,=https --max-redirs 5 -A 'Mozilla/5.0' <url>` to read response headers, then classify by `Content-Type`:
|
|
31
|
+
- `application/pdf`, `image/*` (except `image/svg+xml`), `video/*`, `audio/*`, `application/zip`, `application/vnd.openxmlformats-*`, `application/epub+zip` → **binary**
|
|
32
|
+
- `text/html`, `text/plain`, `application/json` (when the source is a doc/article, not data) → **text**
|
|
33
|
+
- `application/octet-stream` → ambiguous; treat as binary BUT note in chat that the server didn't declare a specific type, and the captured `sha256` + bytes record gives downstream tooling the signal if the bytes turn out to be HTML.
|
|
34
|
+
|
|
35
|
+
### STOP gates evaluated during Step 1a (before any download)
|
|
36
|
+
|
|
37
|
+
1. **Streaming-video / DRM-protected media.** If the URL hostname matches a known streaming pattern (examples — illustrative, not exhaustive: `youtube.com`, `youtu.be`, `vimeo.com`, `twitch.tv`, `tiktok.com`, `spotify.com`, `open.spotify.com`, `podcasts.apple.com`) **OR** the HEAD response shows `Content-Type: text/html` on a URL that looked like media **OR** the HEAD shows anti-bot characteristics (`Server: cloudflare` + `cf-mitigated` / `cf-chl-bypass` headers, an Akamai/Imperva challenge response, 403 with an HTML body) → **STOP**. Tell the user: "Streaming services and DRM-protected media require `yt-dlp` or vendor-specific tooling — out of scope. Paste the transcript, or run `yt-dlp` manually and re-share the resulting file as a local path."
|
|
38
|
+
|
|
39
|
+
2. **URL scheme — HARD BLOCK.** If the URL scheme is not `http://` or `https://` (i.e., `file://`, `gopher://`, `ftp://`, etc.) → **HARD STOP**. Tell the user: "Ingest only fetches `http(s)` URLs. Other schemes (local-file paths, intranet protocols) bypass the size + redirect safeguards and risk pulling cloud-metadata or local-service responses into the KB. If you have a local file, pass its path directly as a local-file source instead of a URL."
|
|
40
|
+
|
|
41
|
+
3. **Auth-walled / paywalled / 4xx.** If HEAD returns 401/402/403/407/429 → STOP. Ask the user to paste the content or share a local copy.
|
|
42
|
+
|
|
43
|
+
## Step 1b: Binary fetch
|
|
44
|
+
|
|
45
|
+
You've classified the source as binary and Step 1a's STOP gates passed. Step 1b adds **write-path-specific** STOP gates that only apply when we're about to land bytes on disk under the source extension:
|
|
46
|
+
|
|
47
|
+
### Step 1b STOP gates (write-path only)
|
|
48
|
+
|
|
49
|
+
1. **Executable / scripted-document extension — HARD BLOCK.** If the URL extension is one OK's upload blocklist covers — Windows executables, POSIX shells, scripted documents (including `.svg` and `.xml`), macOS installer classes, URL-files, cross-platform packages, and Windows shortcut classes — **HARD STOP**. Refuse to download. Tell the user: "Executable / scripted-document extensions are not auto-fetched — the runtime backstop is desktop-only, so plan-level enforcement is the only line of defense in CLI / web contexts. If you genuinely want to archive this file, `curl` it manually outside the agent and reference the local path." This gate fires HERE (write path) and NOT against Step 1c — Step 1c writes a `.md` wrapper with extracted text, not the source extension on disk.
|
|
50
|
+
|
|
51
|
+
2. **Size pre-check.** Run `curl -IL --max-redirs 5 -A 'Mozilla/5.0' '<SOURCE_URL>'` (if not already done in Step 1a's ambiguous-URL branch) and read `Content-Length`:
|
|
52
|
+
- greater than 100 MB → **HARD STOP**. Tell the user the source exceeds GitHub's 100 MB file-size cap and offer the manual-`curl` + Git-LFS escape path.
|
|
53
|
+
- greater than 50 MB → STOP and ask explicitly: "Source is X MB (above the 50 MB GitHub warn threshold). Proceed?"
|
|
54
|
+
- absent → proceed; the `curl --max-filesize` flag is the enforced backstop. Note in chat that the size could not be pre-verified.
|
|
55
|
+
- 50 MB or under → proceed.
|
|
56
|
+
|
|
57
|
+
### Slug derivation (strict shape)
|
|
58
|
+
|
|
59
|
+
Pick a kebab-case slug from the source's filename or title (e.g., `karpathy-2024-llm-os`). The slug becomes both the binary basename and the wrapper basename. Don't put dates in the slug — dates go in frontmatter (and in dated-sibling slugs on re-ingest per Step 5).
|
|
60
|
+
|
|
61
|
+
**The slug MUST match `^[a-z0-9][a-z0-9-]{0,99}$` — kebab-case, ASCII letters / digits / single hyphens only. NO dots, slashes, leading hyphens, or path segments. If you derive the slug from a server-controlled value (`Content-Disposition: filename=`, URL path basename), strip non-conforming characters before using it.** A server returning `Content-Disposition: attachment; filename="../../etc/passwd"` is adversarial; the slug constraint prevents path traversal from a malicious source landing bytes outside the sources folder. If the stripped result is empty, ask the user for a slug.
|
|
62
|
+
|
|
63
|
+
### Download
|
|
64
|
+
|
|
65
|
+
Use your shell tool. Create the destination first if it doesn't exist:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
mkdir -p "<content-dir>/external-sources"
|
|
69
|
+
curl -L --fail \
|
|
70
|
+
--proto =http,=https --proto-redir =http,=https \
|
|
71
|
+
--max-redirs 5 \
|
|
72
|
+
--max-time 60 \
|
|
73
|
+
--max-filesize 104857600 \
|
|
74
|
+
-o "<content-dir>/external-sources/<slug>.<ext>" \
|
|
75
|
+
-A 'Mozilla/5.0' \
|
|
76
|
+
'<SOURCE_URL>'
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Shell-escape any special characters in the URL (single quotes, backticks, dollar signs). Do NOT paste a URL containing a literal single quote directly into the single-quoted curl argument — break it into a shell-safe form first.**
|
|
80
|
+
|
|
81
|
+
Flag rationale:
|
|
82
|
+
- `-L` follows redirects (CDN-fronted sources need this).
|
|
83
|
+
- `--proto =http,=https --proto-redir =http,=https` refuses any scheme other than http(s), and refuses redirects that would downgrade to another scheme. Prevents redirect-chain SSRF into `file://`, `gopher://`, or cloud-metadata endpoints reached via `--max-redirs`.
|
|
84
|
+
- `--fail` exits non-zero on HTTP 4xx/5xx instead of writing an error body to disk.
|
|
85
|
+
- `--max-redirs 5` caps redirect chains (exit 47 on excess).
|
|
86
|
+
- `--max-time 60` caps total request time (exit 28).
|
|
87
|
+
- `--max-filesize 104857600` enforces the 100 MB hard cap as defense-in-depth in case the server omits or lies about `Content-Length` (exit 63). The option has shipped since curl 7.10.8 (2003) — every modern install has it.
|
|
88
|
+
|
|
89
|
+
If curl exits non-zero:
|
|
90
|
+
- 47 (too many redirects) → STOP. Likely a tracking-link or auth-flow URL. Ask the user to paste.
|
|
91
|
+
- 28 (timeout) → STOP. Slow source. Ask the user to retry or share locally.
|
|
92
|
+
- 63 (`--max-filesize` triggered) → `rm -f` the truncated output. STOP and tell the user the server's `Content-Length` was missing or wrong.
|
|
93
|
+
- 22 (HTTP error returned by `--fail`) → STOP. Auth wall, anti-scraping, or vanished URL. Ask the user to paste.
|
|
94
|
+
- Other (e.g., 1 = unsupported protocol from `--proto`) → STOP and report the curl exit code to the user.
|
|
95
|
+
|
|
96
|
+
After a successful download, record the byte size and sha256:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
ls -l "<content-dir>/external-sources/<slug>.<ext>" # bytes
|
|
100
|
+
sha256sum "<content-dir>/external-sources/<slug>.<ext>" # or 'shasum -a 256' on macOS
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
OK's file-watcher picks up the new file and emits `asset-create`. The sidebar refreshes; the file is now indexed.
|
|
104
|
+
|
|
105
|
+
## Step 1c: Text fetch (HTML / article sources, or shell-less host fallback)
|
|
106
|
+
|
|
107
|
+
Either the source is genuinely text (HTML article, plain text doc) OR your host is shell-less and binary preservation is unavailable.
|
|
108
|
+
|
|
109
|
+
Use your available web fetch tool (`WebFetch` or your host's equivalent). If the fetcher returns an obvious *summary* of the page instead of the raw content (some LLM-backed fetch tools do this), note it and try a raw alternative (`curl -sL <url>` if your host has a shell, or ask the user to paste). The goal is verbatim bytes.
|
|
110
|
+
|
|
111
|
+
If the fetch fails (login wall, 401/402/403/429, anti-scraping block), **stop and ask the user to paste the content directly**. Do not save a stub, an error page, or a login wall as "raw content" — that poisons the knowledge base.
|
|
112
|
+
|
|
113
|
+
## Step 2a: Save the binary wrapper (only after Step 1b succeeded)
|
|
114
|
+
|
|
115
|
+
Write a markdown wrapper at `external-sources/<slug>.md`. **Declare the full tag list explicitly — do NOT assume a folder-level cascade exists** (folder frontmatter is self-only; it does not flow into child docs — see `references/folder-model.md`).
|
|
4
116
|
|
|
5
117
|
```yaml
|
|
6
118
|
---
|
|
7
|
-
title:
|
|
8
|
-
description:
|
|
9
|
-
source_url: https://example.com/file.pdf
|
|
10
|
-
source_path: ./<slug>.<ext>
|
|
11
|
-
media_type: application/pdf
|
|
12
|
-
bytes: 1234567
|
|
13
|
-
sha256: <64-char hex
|
|
119
|
+
title: Original title of the source (from <title>, Content-Disposition filename, or your best read)
|
|
120
|
+
description: One-line summary from the source (their words, not yours)
|
|
121
|
+
source_url: https://example.com/path/to/file.pdf
|
|
122
|
+
source_path: ./<slug>.<ext> # relative to this wrapper
|
|
123
|
+
media_type: application/pdf # RFC 6838 type/subtype, from HEAD Content-Type
|
|
124
|
+
bytes: 1234567 # integer, from ls -l or stat
|
|
125
|
+
sha256: <hex sha256 digest> # full 64-char hex, of the embedded binary
|
|
14
126
|
date_fetched: YYYY-MM-DD
|
|
15
|
-
|
|
16
|
-
|
|
127
|
+
author: Original author if known
|
|
128
|
+
preservation: binary
|
|
129
|
+
supersedes: # OPTIONAL — dated-sibling re-ingest (Step 5)
|
|
17
130
|
- <prior-slug>.md
|
|
18
|
-
tags:
|
|
131
|
+
tags:
|
|
132
|
+
- source
|
|
133
|
+
- immutable
|
|
134
|
+
- layer-ingest
|
|
135
|
+
- binary
|
|
19
136
|
---
|
|
20
137
|
|
|
21
138
|
![[<slug>.<ext>]]
|
|
22
139
|
```
|
|
23
140
|
|
|
24
|
-
|
|
141
|
+
The body is just the wiki-embed reference. For images, video, and audio, the embed renders inline. **For PDFs and other opaque file-attachment types (docx, xlsx, zip, etc.), the `![[file.ext]]` form renders as a Notion-style File row that click-dispatches to the appropriate viewer** — the pdfjs canvas viewer is opt-in via the explicit `<Pdf src="./<slug>.pdf" />` JSX form, NOT the wiki-embed default. If the user wants the inline canvas viewer for this specific PDF, they can post-edit the wrapper body to swap the embed for that form.
|
|
142
|
+
|
|
143
|
+
Write via `write` (NOT native `Write` — the CRDT path is mandatory for in-scope markdown).
|
|
144
|
+
|
|
145
|
+
## Step 2b: Save the text wrapper (only after Step 1c — text path or shell-less fallback)
|
|
146
|
+
|
|
147
|
+
Write a markdown wrapper at `external-sources/<slug>.md` with the text content preserved verbatim in the body. Strip obvious boilerplate (nav menus, cookie banners, ads, footer links, "related articles" widgets) but **do not summarize, paraphrase, or interpret**.
|
|
148
|
+
|
|
149
|
+
Frontmatter shape:
|
|
150
|
+
|
|
151
|
+
```yaml
|
|
152
|
+
---
|
|
153
|
+
title: Original title of the source
|
|
154
|
+
description: One-line summary from the source (their words, not yours)
|
|
155
|
+
source_url: https://example.com/article
|
|
156
|
+
media_type: text/html
|
|
157
|
+
date_fetched: YYYY-MM-DD
|
|
158
|
+
author: Original author if known
|
|
159
|
+
preservation: text-extracted # OR: text-only (a shell-less fallback for a binary source)
|
|
160
|
+
# NOTE: no `source_path` — text wrappers ARE the content. `source_path` is meaningful only for
|
|
161
|
+
# binary wrappers (Step 2a), where it points at the co-located binary sibling.
|
|
162
|
+
tags:
|
|
163
|
+
- source
|
|
164
|
+
- immutable
|
|
165
|
+
- layer-ingest
|
|
166
|
+
- text
|
|
167
|
+
---
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**If this is a shell-less fallback for a source that should have been binary** (you detected binary in Step 1a but your host couldn't `curl`), set `preservation: text-only` AND prepend a top-of-body admonition so a future agent (or you, on a different host) can detect and upgrade:
|
|
171
|
+
|
|
172
|
+
```markdown
|
|
173
|
+
> Binary not preserved — this is an extracted-text snapshot of a binary source.
|
|
174
|
+
> Re-run ingest from a shell-capable client to capture the original file.
|
|
175
|
+
|
|
176
|
+
(...verbatim extracted text follows...)
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Downstream tooling can grep `preservation: text-only` in frontmatter to find docs that need upgrading.
|
|
180
|
+
|
|
181
|
+
## Step 3: Preserve the content faithfully
|
|
182
|
+
|
|
183
|
+
For binary wrappers: the wrapper body is the wiki-embed reference; no further body content is needed. All metadata lives in frontmatter.
|
|
184
|
+
|
|
185
|
+
For text wrappers:
|
|
186
|
+
- **Keep** headings, lists, quotes, code blocks, images, citations, references.
|
|
187
|
+
- **Strip** obvious boilerplate: nav menus, cookie banners, ads, footer links, "related articles" widgets.
|
|
188
|
+
- **Do NOT** summarize, critique, paraphrase, or interpret.
|
|
189
|
+
- **For very long sources**, consider splitting by major section with cross-references in frontmatter.
|
|
190
|
+
|
|
191
|
+
## Step 4: Verify
|
|
192
|
+
|
|
193
|
+
- File(s) exist under the sources folder (binary + wrapper, or wrapper alone for text).
|
|
194
|
+
- Valid frontmatter (at minimum `title`, `description`, `source_url`, `preservation`, and the full `tags` list — plus `source_path` for binary wrappers).
|
|
195
|
+
- For binary preservation: `sha256` and `bytes` recorded; `media_type` matches what the HEAD response returned.
|
|
196
|
+
- `exec("ls -A <content-dir>/external-sources/")` lists the new file(s) with enrichment.
|
|
197
|
+
|
|
198
|
+
## Step 5: Re-ingest semantics (sha256 mismatch on a previously-ingested source)
|
|
199
|
+
|
|
200
|
+
If `external-sources/<slug>.<ext>` already exists when you reach Step 1b:
|
|
201
|
+
|
|
202
|
+
1. Compute its sha256.
|
|
203
|
+
2. If the new sha matches the existing sha → **STOP** (no-op). Tell the user: "Already at `external-sources/<slug>.<ext>` — sha256 matches, no change."
|
|
204
|
+
3. If the new sha differs → save the new bytes as `external-sources/<slug>.YYYY-MM-DD.<ext>` (today's date in the slug) AND write a **new** wrapper `external-sources/<slug>.YYYY-MM-DD.md` whose `supersedes:` is a YAML list naming the predecessor:
|
|
205
|
+
```yaml
|
|
206
|
+
supersedes:
|
|
207
|
+
- <slug>.md
|
|
208
|
+
```
|
|
209
|
+
**Do not mutate the old wrapper or the old binary** — the sources layer is append-only by convention.
|
|
210
|
+
|
|
211
|
+
The latest-dated wrapper is the "current view"; older wrappers remain valid as historical snapshots.
|
|
212
|
+
|
|
213
|
+
## Step 6: Discuss takeaways with the user (no file write)
|
|
214
|
+
|
|
215
|
+
After preservation, briefly surface back to the user what the source actually contains — in **chat**, not in the raw file. The raw file stays verbatim; the human collaborator gets a quick orientation.
|
|
216
|
+
|
|
217
|
+
- 3-5 bullet points capturing the source's main claims, with no editorializing.
|
|
218
|
+
- Note any **tensions** with existing knowledge-base docs you surfaced in Step 0 — agents that ingest in isolation miss the "wait, this contradicts `[prior article](./path/to/prior.md)`" signal.
|
|
219
|
+
- Offer next steps: "Shall I research this topic now, or is preservation enough?" Don't silently chain into a research pass — the user may have just wanted the archive.
|
|
220
|
+
- For binary preservation: include the one-line breadcrumb (`saved external-sources/<slug>.<ext> — <bytes> bytes, sha256 <abbrev>`).
|
|
221
|
+
- For a shell-less text fallback of a binary source: explicitly tell the user the binary was not preserved and recommend re-running from a shell-capable client.
|
|
222
|
+
|
|
223
|
+
## Step 7 (optional): Update neighbor docs to link the new source
|
|
224
|
+
|
|
225
|
+
If the source is directly relevant to an existing article or research doc, update that doc to link the new raw source. A preserved source that no doc points at is an island. Limit this to 1-3 high-signal neighbors.
|
|
226
|
+
|
|
227
|
+
- Follow the `write` / `edit` contract from the core skill.
|
|
228
|
+
- For binary wrappers, prefer linking to the wrapper (the markdown doc), not the binary directly. The wrapper is the closed-loop citation target; the binary is the embedded asset within it.
|
|
229
|
+
- Do NOT mass-update every neighbor. Focused cross-linking is rewarded; noisy neighbor-pings degrade the signal.
|
|
230
|
+
|
|
231
|
+
## Non-goals
|
|
232
|
+
|
|
233
|
+
- **No analysis** — don't interpret, compare, or critique the source. That is the research layer's job.
|
|
234
|
+
- **No promotion to a canonical article** — that is the consolidate layer's job, later.
|
|
235
|
+
- **No silent chaining into research** — ingest completes on its own; the user explicitly opts into a research pass.
|
|
236
|
+
- **No synthesis inside the raw file** — takeaways live in chat or a separate summary doc, never mixed into the preserved source.
|
|
237
|
+
- **No OCR / transcription** — binary preservation only.
|
|
238
|
+
- **No streaming-video direct download** — `yt-dlp` is a separate workflow; STOP and route to it (Step 1a STOP gate 1).
|
|
239
|
+
- **No executable / scripted-document auto-fetch** — hard-blocked at Step 1b STOP gate 1 (write-path only). The user runs `curl` manually outside the agent if they need to archive such a file.
|
|
240
|
+
|
|
241
|
+
This procedure feeds a three-layer pipeline (ingest → research → consolidate). Ingest is this file, and ships with every `ok init`; research and consolidate are two member skills of the `knowledge-base` starter pack, available only once it is seeded. See `references/starter-packs.md`.
|