@inharness-ai/claude4spec 1.0.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/.claude/skills/c4s-brief-implementer/SKILL.md +105 -0
- package/.claude/skills/c4s-spec-reader/SKILL.md +46 -0
- package/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/bin/agent-md-template.d.ts +1 -0
- package/dist/bin/agent-md-template.js +76 -0
- package/dist/bin/agent-md-template.js.map +1 -0
- package/dist/bin/bootstrap-template.d.ts +1 -0
- package/dist/bin/bootstrap-template.js +12 -0
- package/dist/bin/bootstrap-template.js.map +1 -0
- package/dist/bin/c4s/args.d.ts +13 -0
- package/dist/bin/c4s/args.js +82 -0
- package/dist/bin/c4s/args.js.map +1 -0
- package/dist/bin/c4s/commands/_meta.d.ts +2 -0
- package/dist/bin/c4s/commands/_meta.js +13 -0
- package/dist/bin/c4s/commands/_meta.js.map +1 -0
- package/dist/bin/c4s/commands/catalog.d.ts +2 -0
- package/dist/bin/c4s/commands/catalog.js +38 -0
- package/dist/bin/c4s/commands/catalog.js.map +1 -0
- package/dist/bin/c4s/commands/detail.d.ts +2 -0
- package/dist/bin/c4s/commands/detail.js +22 -0
- package/dist/bin/c4s/commands/detail.js.map +1 -0
- package/dist/bin/c4s/commands/element-list.d.ts +2 -0
- package/dist/bin/c4s/commands/element-list.js +23 -0
- package/dist/bin/c4s/commands/element-list.js.map +1 -0
- package/dist/bin/c4s/commands/inline-mention.d.ts +2 -0
- package/dist/bin/c4s/commands/inline-mention.js +22 -0
- package/dist/bin/c4s/commands/inline-mention.js.map +1 -0
- package/dist/bin/c4s/commands/list-slugs.d.ts +2 -0
- package/dist/bin/c4s/commands/list-slugs.js +16 -0
- package/dist/bin/c4s/commands/list-slugs.js.map +1 -0
- package/dist/bin/c4s/commands/list-tags.d.ts +2 -0
- package/dist/bin/c4s/commands/list-tags.js +13 -0
- package/dist/bin/c4s/commands/list-tags.js.map +1 -0
- package/dist/bin/c4s/commands/resolve.d.ts +2 -0
- package/dist/bin/c4s/commands/resolve.js +40 -0
- package/dist/bin/c4s/commands/resolve.js.map +1 -0
- package/dist/bin/c4s/commands/section-ref.d.ts +2 -0
- package/dist/bin/c4s/commands/section-ref.js +25 -0
- package/dist/bin/c4s/commands/section-ref.js.map +1 -0
- package/dist/bin/c4s/commands/single-element.d.ts +2 -0
- package/dist/bin/c4s/commands/single-element.js +22 -0
- package/dist/bin/c4s/commands/single-element.js.map +1 -0
- package/dist/bin/c4s/commands/tagged-list-mixed.d.ts +2 -0
- package/dist/bin/c4s/commands/tagged-list-mixed.js +39 -0
- package/dist/bin/c4s/commands/tagged-list-mixed.js.map +1 -0
- package/dist/bin/c4s/commands/tagged-list.d.ts +2 -0
- package/dist/bin/c4s/commands/tagged-list.js +24 -0
- package/dist/bin/c4s/commands/tagged-list.js.map +1 -0
- package/dist/bin/c4s/context.d.ts +12 -0
- package/dist/bin/c4s/context.js +27 -0
- package/dist/bin/c4s/context.js.map +1 -0
- package/dist/bin/c4s/errors.d.ts +6 -0
- package/dist/bin/c4s/errors.js +11 -0
- package/dist/bin/c4s/errors.js.map +1 -0
- package/dist/bin/c4s/output.d.ts +4 -0
- package/dist/bin/c4s/output.js +57 -0
- package/dist/bin/c4s/output.js.map +1 -0
- package/dist/bin/c4s/project.d.ts +1 -0
- package/dist/bin/c4s/project.js +23 -0
- package/dist/bin/c4s/project.js.map +1 -0
- package/dist/bin/c4s/type-validation.d.ts +3 -0
- package/dist/bin/c4s/type-validation.js +11 -0
- package/dist/bin/c4s/type-validation.js.map +1 -0
- package/dist/bin/c4s-mcp.d.ts +2 -0
- package/dist/bin/c4s-mcp.js +118 -0
- package/dist/bin/c4s-mcp.js.map +1 -0
- package/dist/bin/c4s.d.ts +2 -0
- package/dist/bin/c4s.js +134 -0
- package/dist/bin/c4s.js.map +1 -0
- package/dist/bin/claude4spec.d.ts +2 -0
- package/dist/bin/claude4spec.js +132 -0
- package/dist/bin/claude4spec.js.map +1 -0
- package/dist/bin/gitignore.d.ts +1 -0
- package/dist/bin/gitignore.js +44 -0
- package/dist/bin/gitignore.js.map +1 -0
- package/dist/client/assets/arc-D8brDDag.js +1 -0
- package/dist/client/assets/architectureDiagram-3BPJPVTR-Bmh1uTQZ.js +36 -0
- package/dist/client/assets/blockDiagram-GPEHLZMM-55jaVWwd.js +132 -0
- package/dist/client/assets/c4Diagram-AAUBKEIU-Dxm0tLsZ.js +10 -0
- package/dist/client/assets/channel-ArVcv4Yl.js +1 -0
- package/dist/client/assets/chunk-2J33WTMH-vDJ1slcJ.js +1 -0
- package/dist/client/assets/chunk-4BX2VUAB-DP6CC-Qn.js +1 -0
- package/dist/client/assets/chunk-55IACEB6-SgOSJYkL.js +1 -0
- package/dist/client/assets/chunk-727SXJPM-BtRfbjBO.js +206 -0
- package/dist/client/assets/chunk-AQP2D5EJ-yIRaTgFg.js +231 -0
- package/dist/client/assets/chunk-FMBD7UC4-B_VD4t8N.js +15 -0
- package/dist/client/assets/chunk-ND2GUHAM-BvJdtX82.js +1 -0
- package/dist/client/assets/chunk-QZHKN3VN-BLNWKymD.js +1 -0
- package/dist/client/assets/classDiagram-4FO5ZUOK-B3nmPR7w.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B3nmPR7w.js +1 -0
- package/dist/client/assets/cose-bilkent-S5V4N54A-BQyA-r-y.js +1 -0
- package/dist/client/assets/cytoscape.esm-D_LviqZs.js +331 -0
- package/dist/client/assets/dagre-BM42HDAG-CAh0mTzA.js +4 -0
- package/dist/client/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/client/assets/diagram-2AECGRRQ-C83TGK4o.js +43 -0
- package/dist/client/assets/diagram-5GNKFQAL-2L6uowvf.js +10 -0
- package/dist/client/assets/diagram-KO2AKTUF-Cj5n4jdq.js +3 -0
- package/dist/client/assets/diagram-LMA3HP47-Bp5SDMjg.js +24 -0
- package/dist/client/assets/diagram-OG6HWLK6-cFsDQ8Qk.js +24 -0
- package/dist/client/assets/erDiagram-TEJ5UH35-D8G5xpg3.js +85 -0
- package/dist/client/assets/flowDiagram-I6XJVG4X-CuNudlCD.js +162 -0
- package/dist/client/assets/ganttDiagram-6RSMTGT7-CtFlsB15.js +292 -0
- package/dist/client/assets/gitGraphDiagram-PVQCEYII-h66Tso4O.js +106 -0
- package/dist/client/assets/graph-CAnANduQ.js +1 -0
- package/dist/client/assets/index-CZOpb3O7.css +1 -0
- package/dist/client/assets/index-D5ljIkCJ.js +727 -0
- package/dist/client/assets/index-aJE-l7h7.js +11 -0
- package/dist/client/assets/index-aPVup1Re.js +51 -0
- package/dist/client/assets/infoDiagram-5YYISTIA-CO_BLfuW.js +2 -0
- package/dist/client/assets/init-Gi6I4Gst.js +1 -0
- package/dist/client/assets/ishikawaDiagram-YF4QCWOH-D4rSRnQA.js +70 -0
- package/dist/client/assets/journeyDiagram-JHISSGLW-GyHI6dB8.js +139 -0
- package/dist/client/assets/kanban-definition-UN3LZRKU-CrH33WLe.js +89 -0
- package/dist/client/assets/katex-CQk2-UhE.js +257 -0
- package/dist/client/assets/layout-DGIYPm2g.js +1 -0
- package/dist/client/assets/linear-Dh1OyvSm.js +1 -0
- package/dist/client/assets/mermaid.core-C45sMDhS.js +309 -0
- package/dist/client/assets/mindmap-definition-RKZ34NQL-Bgwb0vwA.js +96 -0
- package/dist/client/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/client/assets/pieDiagram-4H26LBE5-l9cCpVfG.js +30 -0
- package/dist/client/assets/quadrantDiagram-W4KKPZXB-BCPSUbC3.js +7 -0
- package/dist/client/assets/requirementDiagram-4Y6WPE33-TEGOe-vV.js +84 -0
- package/dist/client/assets/sankeyDiagram-5OEKKPKP-C69pv_7D.js +40 -0
- package/dist/client/assets/sequenceDiagram-3UESZ5HK-arinzeCk.js +162 -0
- package/dist/client/assets/stateDiagram-AJRCARHV-C2YENpmw.js +1 -0
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CS6ocDH6.js +1 -0
- package/dist/client/assets/timeline-definition-PNZ67QCA-h5qtI99f.js +120 -0
- package/dist/client/assets/vennDiagram-CIIHVFJN-CnuK75Ut.js +34 -0
- package/dist/client/assets/wardley-L42UT6IY-B4bQ0Xyy.js +173 -0
- package/dist/client/assets/wardleyDiagram-YWT4CUSO-apV8olQc.js +78 -0
- package/dist/client/assets/xychartDiagram-2RQKCTM6-OTP6zeEy.js +7 -0
- package/dist/client/index.html +19 -0
- package/dist/server/config.d.ts +59 -0
- package/dist/server/config.js +211 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/core/plugin-host/cross-cutting.d.ts +8 -0
- package/dist/server/core/plugin-host/cross-cutting.js +14 -0
- package/dist/server/core/plugin-host/cross-cutting.js.map +1 -0
- package/dist/server/core/plugin-host/entities-router.d.ts +11 -0
- package/dist/server/core/plugin-host/entities-router.js +77 -0
- package/dist/server/core/plugin-host/entities-router.js.map +1 -0
- package/dist/server/core/plugin-host/host.d.ts +11 -0
- package/dist/server/core/plugin-host/host.js +128 -0
- package/dist/server/core/plugin-host/host.js.map +1 -0
- package/dist/server/core/plugin-host/legacy-adapter.d.ts +31 -0
- package/dist/server/core/plugin-host/legacy-adapter.js +88 -0
- package/dist/server/core/plugin-host/legacy-adapter.js.map +1 -0
- package/dist/server/core/plugin-host/serialization-engine.d.ts +35 -0
- package/dist/server/core/plugin-host/serialization-engine.js +132 -0
- package/dist/server/core/plugin-host/serialization-engine.js.map +1 -0
- package/dist/server/core/plugin-host/types.d.ts +143 -0
- package/dist/server/core/plugin-host/types.js +10 -0
- package/dist/server/core/plugin-host/types.js.map +1 -0
- package/dist/server/db/fixups/backfill-plan-titles.d.ts +2 -0
- package/dist/server/db/fixups/backfill-plan-titles.js +22 -0
- package/dist/server/db/fixups/backfill-plan-titles.js.map +1 -0
- package/dist/server/db/index.d.ts +6 -0
- package/dist/server/db/index.js +26 -0
- package/dist/server/db/index.js.map +1 -0
- package/dist/server/db/migrate.d.ts +2 -0
- package/dist/server/db/migrate.js +33 -0
- package/dist/server/db/migrate.js.map +1 -0
- package/dist/server/db/migrations/000_init.sql +7 -0
- package/dist/server/db/migrations/001_endpoint.sql +51 -0
- package/dist/server/db/migrations/002_dto.sql +23 -0
- package/dist/server/db/migrations/003_drop_endpoint_body.sql +5 -0
- package/dist/server/db/migrations/004_drop_module_and_status.sql +31 -0
- package/dist/server/db/migrations/005_chat.sql +23 -0
- package/dist/server/db/migrations/006_database_table.sql +10 -0
- package/dist/server/db/migrations/007_sections.sql +30 -0
- package/dist/server/db/migrations/008_subagent_task.sql +20 -0
- package/dist/server/db/migrations/009_chat_todo_snapshot.sql +4 -0
- package/dist/server/db/migrations/010_chat_plan_mode.sql +5 -0
- package/dist/server/db/migrations/011_chat_initial_system_prompt.sql +4 -0
- package/dist/server/db/migrations/012_chat_message_status.sql +5 -0
- package/dist/server/db/migrations/013_chat_usage_snapshot.sql +7 -0
- package/dist/server/db/migrations/014_plans.sql +33 -0
- package/dist/server/db/migrations/015_dto_examples.sql +4 -0
- package/dist/server/db/migrations/016_ui_view.sql +10 -0
- package/dist/server/db/migrations/017_entity_version_m17.sql +23 -0
- package/dist/server/db/migrations/018_page_version.sql +20 -0
- package/dist/server/db/migrations/019_spec_release.sql +13 -0
- package/dist/server/db/migrations/020_drop_plan_status.sql +10 -0
- package/dist/server/db/migrations/021_plans_n1.sql +36 -0
- package/dist/server/db/migrations/022_brief_chat_columns.sql +23 -0
- package/dist/server/db/migrations/023_page_version_kind.sql +26 -0
- package/dist/server/db/migrations/024_chat_context_size.sql +10 -0
- package/dist/server/db/migrations/025_ac.sql +19 -0
- package/dist/server/db/migrations/026_ac_seed.sql +75 -0
- package/dist/server/db/migrations/027_page_version_change_summary.sql +10 -0
- package/dist/server/db/readonly.d.ts +12 -0
- package/dist/server/db/readonly.js +32 -0
- package/dist/server/db/readonly.js.map +1 -0
- package/dist/server/domain/raw-entity-reader.d.ts +76 -0
- package/dist/server/domain/raw-entity-reader.js +240 -0
- package/dist/server/domain/raw-entity-reader.js.map +1 -0
- package/dist/server/entities/ac/mcp-server.d.ts +10 -0
- package/dist/server/entities/ac/mcp-server.js +154 -0
- package/dist/server/entities/ac/mcp-server.js.map +1 -0
- package/dist/server/entities/ac/plugin.d.ts +2 -0
- package/dist/server/entities/ac/plugin.js +33 -0
- package/dist/server/entities/ac/plugin.js.map +1 -0
- package/dist/server/entities/ac/routes.d.ts +4 -0
- package/dist/server/entities/ac/routes.js +92 -0
- package/dist/server/entities/ac/routes.js.map +1 -0
- package/dist/server/entities/ac/serializer.d.ts +13 -0
- package/dist/server/entities/ac/serializer.js +124 -0
- package/dist/server/entities/ac/serializer.js.map +1 -0
- package/dist/server/entities/ac/services.d.ts +35 -0
- package/dist/server/entities/ac/services.js +261 -0
- package/dist/server/entities/ac/services.js.map +1 -0
- package/dist/server/entities/ac/system-prompt.d.ts +2 -0
- package/dist/server/entities/ac/system-prompt.js +18 -0
- package/dist/server/entities/ac/system-prompt.js.map +1 -0
- package/dist/server/entities/database-table/mcp-server.d.ts +10 -0
- package/dist/server/entities/database-table/mcp-server.js +184 -0
- package/dist/server/entities/database-table/mcp-server.js.map +1 -0
- package/dist/server/entities/database-table/plugin.d.ts +2 -0
- package/dist/server/entities/database-table/plugin.js +33 -0
- package/dist/server/entities/database-table/plugin.js.map +1 -0
- package/dist/server/entities/database-table/routes.d.ts +5 -0
- package/dist/server/entities/database-table/routes.js +86 -0
- package/dist/server/entities/database-table/routes.js.map +1 -0
- package/dist/server/entities/database-table/serializer.d.ts +12 -0
- package/dist/server/entities/database-table/serializer.js +192 -0
- package/dist/server/entities/database-table/serializer.js.map +1 -0
- package/dist/server/entities/database-table/services.d.ts +45 -0
- package/dist/server/entities/database-table/services.js +323 -0
- package/dist/server/entities/database-table/services.js.map +1 -0
- package/dist/server/entities/database-table/system-prompt.d.ts +2 -0
- package/dist/server/entities/database-table/system-prompt.js +11 -0
- package/dist/server/entities/database-table/system-prompt.js.map +1 -0
- package/dist/server/entities/dto/mcp-server.d.ts +10 -0
- package/dist/server/entities/dto/mcp-server.js +141 -0
- package/dist/server/entities/dto/mcp-server.js.map +1 -0
- package/dist/server/entities/dto/plugin.d.ts +2 -0
- package/dist/server/entities/dto/plugin.js +33 -0
- package/dist/server/entities/dto/plugin.js.map +1 -0
- package/dist/server/entities/dto/routes.d.ts +4 -0
- package/dist/server/entities/dto/routes.js +74 -0
- package/dist/server/entities/dto/routes.js.map +1 -0
- package/dist/server/entities/dto/serializer.d.ts +12 -0
- package/dist/server/entities/dto/serializer.js +184 -0
- package/dist/server/entities/dto/serializer.js.map +1 -0
- package/dist/server/entities/dto/services.d.ts +30 -0
- package/dist/server/entities/dto/services.js +242 -0
- package/dist/server/entities/dto/services.js.map +1 -0
- package/dist/server/entities/dto/system-prompt.d.ts +2 -0
- package/dist/server/entities/dto/system-prompt.js +11 -0
- package/dist/server/entities/dto/system-prompt.js.map +1 -0
- package/dist/server/entities/endpoint/mcp-server.d.ts +10 -0
- package/dist/server/entities/endpoint/mcp-server.js +156 -0
- package/dist/server/entities/endpoint/mcp-server.js.map +1 -0
- package/dist/server/entities/endpoint/plugin.d.ts +2 -0
- package/dist/server/entities/endpoint/plugin.js +36 -0
- package/dist/server/entities/endpoint/plugin.js.map +1 -0
- package/dist/server/entities/endpoint/routes.d.ts +4 -0
- package/dist/server/entities/endpoint/routes.js +107 -0
- package/dist/server/entities/endpoint/routes.js.map +1 -0
- package/dist/server/entities/endpoint/serializer.d.ts +17 -0
- package/dist/server/entities/endpoint/serializer.js +217 -0
- package/dist/server/entities/endpoint/serializer.js.map +1 -0
- package/dist/server/entities/endpoint/services.d.ts +30 -0
- package/dist/server/entities/endpoint/services.js +260 -0
- package/dist/server/entities/endpoint/services.js.map +1 -0
- package/dist/server/entities/endpoint/system-prompt.d.ts +2 -0
- package/dist/server/entities/endpoint/system-prompt.js +11 -0
- package/dist/server/entities/endpoint/system-prompt.js.map +1 -0
- package/dist/server/entities/ui-view/mcp-server.d.ts +10 -0
- package/dist/server/entities/ui-view/mcp-server.js +161 -0
- package/dist/server/entities/ui-view/mcp-server.js.map +1 -0
- package/dist/server/entities/ui-view/plugin.d.ts +2 -0
- package/dist/server/entities/ui-view/plugin.js +33 -0
- package/dist/server/entities/ui-view/plugin.js.map +1 -0
- package/dist/server/entities/ui-view/routes.d.ts +5 -0
- package/dist/server/entities/ui-view/routes.js +82 -0
- package/dist/server/entities/ui-view/routes.js.map +1 -0
- package/dist/server/entities/ui-view/serializer.d.ts +12 -0
- package/dist/server/entities/ui-view/serializer.js +262 -0
- package/dist/server/entities/ui-view/serializer.js.map +1 -0
- package/dist/server/entities/ui-view/services.d.ts +35 -0
- package/dist/server/entities/ui-view/services.js +255 -0
- package/dist/server/entities/ui-view/services.js.map +1 -0
- package/dist/server/entities/ui-view/system-prompt.d.ts +7 -0
- package/dist/server/entities/ui-view/system-prompt.js +15 -0
- package/dist/server/entities/ui-view/system-prompt.js.map +1 -0
- package/dist/server/external-skills/brief-implementer-template.d.ts +2 -0
- package/dist/server/external-skills/brief-implementer-template.js +123 -0
- package/dist/server/external-skills/brief-implementer-template.js.map +1 -0
- package/dist/server/external-skills/external-skills-service.d.ts +3 -0
- package/dist/server/external-skills/external-skills-service.js +47 -0
- package/dist/server/external-skills/external-skills-service.js.map +1 -0
- package/dist/server/external-skills/spec-reader-template.d.ts +2 -0
- package/dist/server/external-skills/spec-reader-template.js +47 -0
- package/dist/server/external-skills/spec-reader-template.js.map +1 -0
- package/dist/server/fs/watcher.d.ts +26 -0
- package/dist/server/fs/watcher.js +64 -0
- package/dist/server/fs/watcher.js.map +1 -0
- package/dist/server/index.d.ts +18 -0
- package/dist/server/index.js +474 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp/brief-tools.d.ts +19 -0
- package/dist/server/mcp/brief-tools.js +189 -0
- package/dist/server/mcp/brief-tools.js.map +1 -0
- package/dist/server/mcp/c4s-reader.d.ts +12 -0
- package/dist/server/mcp/c4s-reader.js +263 -0
- package/dist/server/mcp/c4s-reader.js.map +1 -0
- package/dist/server/mcp/database-tools.d.ts +10 -0
- package/dist/server/mcp/database-tools.js +184 -0
- package/dist/server/mcp/database-tools.js.map +1 -0
- package/dist/server/mcp/dependency-tools.d.ts +12 -0
- package/dist/server/mcp/dependency-tools.js +205 -0
- package/dist/server/mcp/dependency-tools.js.map +1 -0
- package/dist/server/mcp/dto-tools.d.ts +10 -0
- package/dist/server/mcp/dto-tools.js +141 -0
- package/dist/server/mcp/dto-tools.js.map +1 -0
- package/dist/server/mcp/endpoint-tools.d.ts +10 -0
- package/dist/server/mcp/endpoint-tools.js +156 -0
- package/dist/server/mcp/endpoint-tools.js.map +1 -0
- package/dist/server/mcp/ensure-mcp-json.d.ts +6 -0
- package/dist/server/mcp/ensure-mcp-json.js +30 -0
- package/dist/server/mcp/ensure-mcp-json.js.map +1 -0
- package/dist/server/mcp/index.d.ts +29 -0
- package/dist/server/mcp/index.js +40 -0
- package/dist/server/mcp/index.js.map +1 -0
- package/dist/server/mcp/plan-tools.d.ts +7 -0
- package/dist/server/mcp/plan-tools.js +105 -0
- package/dist/server/mcp/plan-tools.js.map +1 -0
- package/dist/server/mcp/reference-tools.d.ts +17 -0
- package/dist/server/mcp/reference-tools.js +630 -0
- package/dist/server/mcp/reference-tools.js.map +1 -0
- package/dist/server/mcp/release-tools/index.d.ts +21 -0
- package/dist/server/mcp/release-tools/index.js +140 -0
- package/dist/server/mcp/release-tools/index.js.map +1 -0
- package/dist/server/mcp/release-tools/projection.d.ts +32 -0
- package/dist/server/mcp/release-tools/projection.js +278 -0
- package/dist/server/mcp/release-tools/projection.js.map +1 -0
- package/dist/server/mcp/release-tools/types.d.ts +91 -0
- package/dist/server/mcp/release-tools/types.js +11 -0
- package/dist/server/mcp/release-tools/types.js.map +1 -0
- package/dist/server/mcp/release-tools.d.ts +14 -0
- package/dist/server/mcp/release-tools.js +83 -0
- package/dist/server/mcp/release-tools.js.map +1 -0
- package/dist/server/mcp/ui-view-tools.d.ts +10 -0
- package/dist/server/mcp/ui-view-tools.js +161 -0
- package/dist/server/mcp/ui-view-tools.js.map +1 -0
- package/dist/server/routes/briefs.d.ts +8 -0
- package/dist/server/routes/briefs.js +178 -0
- package/dist/server/routes/briefs.js.map +1 -0
- package/dist/server/routes/chat.d.ts +29 -0
- package/dist/server/routes/chat.js +604 -0
- package/dist/server/routes/chat.js.map +1 -0
- package/dist/server/routes/database-tables.d.ts +5 -0
- package/dist/server/routes/database-tables.js +86 -0
- package/dist/server/routes/database-tables.js.map +1 -0
- package/dist/server/routes/dependencies.d.ts +6 -0
- package/dist/server/routes/dependencies.js +164 -0
- package/dist/server/routes/dependencies.js.map +1 -0
- package/dist/server/routes/dtos.d.ts +4 -0
- package/dist/server/routes/dtos.js +74 -0
- package/dist/server/routes/dtos.js.map +1 -0
- package/dist/server/routes/endpoints.d.ts +4 -0
- package/dist/server/routes/endpoints.js +107 -0
- package/dist/server/routes/endpoints.js.map +1 -0
- package/dist/server/routes/entities.d.ts +8 -0
- package/dist/server/routes/entities.js +84 -0
- package/dist/server/routes/entities.js.map +1 -0
- package/dist/server/routes/errors.d.ts +2 -0
- package/dist/server/routes/errors.js +37 -0
- package/dist/server/routes/errors.js.map +1 -0
- package/dist/server/routes/page-links.d.ts +3 -0
- package/dist/server/routes/page-links.js +40 -0
- package/dist/server/routes/page-links.js.map +1 -0
- package/dist/server/routes/pages.d.ts +5 -0
- package/dist/server/routes/pages.js +142 -0
- package/dist/server/routes/pages.js.map +1 -0
- package/dist/server/routes/plans.d.ts +3 -0
- package/dist/server/routes/plans.js +192 -0
- package/dist/server/routes/plans.js.map +1 -0
- package/dist/server/routes/references.d.ts +3 -0
- package/dist/server/routes/references.js +34 -0
- package/dist/server/routes/references.js.map +1 -0
- package/dist/server/routes/releases.d.ts +4 -0
- package/dist/server/routes/releases.js +122 -0
- package/dist/server/routes/releases.js.map +1 -0
- package/dist/server/routes/sections.d.ts +3 -0
- package/dist/server/routes/sections.js +32 -0
- package/dist/server/routes/sections.js.map +1 -0
- package/dist/server/routes/tags.d.ts +4 -0
- package/dist/server/routes/tags.js +56 -0
- package/dist/server/routes/tags.js.map +1 -0
- package/dist/server/routes/threads.d.ts +3 -0
- package/dist/server/routes/threads.js +78 -0
- package/dist/server/routes/threads.js.map +1 -0
- package/dist/server/routes/todos.d.ts +3 -0
- package/dist/server/routes/todos.js +28 -0
- package/dist/server/routes/todos.js.map +1 -0
- package/dist/server/routes/ui-views.d.ts +5 -0
- package/dist/server/routes/ui-views.js +82 -0
- package/dist/server/routes/ui-views.js.map +1 -0
- package/dist/server/serialization/auto-schema.d.ts +3 -0
- package/dist/server/serialization/auto-schema.js +55 -0
- package/dist/server/serialization/auto-schema.js.map +1 -0
- package/dist/server/serialization/fallback.d.ts +4 -0
- package/dist/server/serialization/fallback.js +27 -0
- package/dist/server/serialization/fallback.js.map +1 -0
- package/dist/server/serialization/inline-renderer.d.ts +4 -0
- package/dist/server/serialization/inline-renderer.js +151 -0
- package/dist/server/serialization/inline-renderer.js.map +1 -0
- package/dist/server/serialization/registerAll.d.ts +6 -0
- package/dist/server/serialization/registerAll.js +7 -0
- package/dist/server/serialization/registerAll.js.map +1 -0
- package/dist/server/serialization/registry.d.ts +26 -0
- package/dist/server/serialization/registry.js +121 -0
- package/dist/server/serialization/registry.js.map +1 -0
- package/dist/server/serialization/resolve-page.d.ts +24 -0
- package/dist/server/serialization/resolve-page.js +192 -0
- package/dist/server/serialization/resolve-page.js.map +1 -0
- package/dist/server/serialization/serializers/database-table.d.ts +1 -0
- package/dist/server/serialization/serializers/database-table.js +46 -0
- package/dist/server/serialization/serializers/database-table.js.map +1 -0
- package/dist/server/serialization/serializers/dto.d.ts +1 -0
- package/dist/server/serialization/serializers/dto.js +48 -0
- package/dist/server/serialization/serializers/dto.js.map +1 -0
- package/dist/server/serialization/serializers/endpoint.d.ts +1 -0
- package/dist/server/serialization/serializers/endpoint.js +93 -0
- package/dist/server/serialization/serializers/endpoint.js.map +1 -0
- package/dist/server/serialization/serializers/section.d.ts +1 -0
- package/dist/server/serialization/serializers/section.js +24 -0
- package/dist/server/serialization/serializers/section.js.map +1 -0
- package/dist/server/serialization/serializers/ui-view.d.ts +1 -0
- package/dist/server/serialization/serializers/ui-view.js +124 -0
- package/dist/server/serialization/serializers/ui-view.js.map +1 -0
- package/dist/server/serialization/snapshot.d.ts +22 -0
- package/dist/server/serialization/snapshot.js +102 -0
- package/dist/server/serialization/snapshot.js.map +1 -0
- package/dist/server/serialization/types.d.ts +70 -0
- package/dist/server/serialization/types.js +7 -0
- package/dist/server/serialization/types.js.map +1 -0
- package/dist/server/serialization/writer.d.ts +41 -0
- package/dist/server/serialization/writer.js +13 -0
- package/dist/server/serialization/writer.js.map +1 -0
- package/dist/server/services/brief.d.ts +86 -0
- package/dist/server/services/brief.js +218 -0
- package/dist/server/services/brief.js.map +1 -0
- package/dist/server/services/chat-context.d.ts +26 -0
- package/dist/server/services/chat-context.js +434 -0
- package/dist/server/services/chat-context.js.map +1 -0
- package/dist/server/services/chat.d.ts +50 -0
- package/dist/server/services/chat.js +309 -0
- package/dist/server/services/chat.js.map +1 -0
- package/dist/server/services/database-table.d.ts +36 -0
- package/dist/server/services/database-table.js +303 -0
- package/dist/server/services/database-table.js.map +1 -0
- package/dist/server/services/dependencies.d.ts +45 -0
- package/dist/server/services/dependencies.js +302 -0
- package/dist/server/services/dependencies.js.map +1 -0
- package/dist/server/services/dto.d.ts +22 -0
- package/dist/server/services/dto.js +222 -0
- package/dist/server/services/dto.js.map +1 -0
- package/dist/server/services/endpoint.d.ts +22 -0
- package/dist/server/services/endpoint.js +239 -0
- package/dist/server/services/endpoint.js.map +1 -0
- package/dist/server/services/entity-writer.d.ts +46 -0
- package/dist/server/services/entity-writer.js +137 -0
- package/dist/server/services/entity-writer.js.map +1 -0
- package/dist/server/services/page-serializer.d.ts +109 -0
- package/dist/server/services/page-serializer.js +359 -0
- package/dist/server/services/page-serializer.js.map +1 -0
- package/dist/server/services/page-version.d.ts +75 -0
- package/dist/server/services/page-version.js +159 -0
- package/dist/server/services/page-version.js.map +1 -0
- package/dist/server/services/pages-frontmatter-indexer.d.ts +51 -0
- package/dist/server/services/pages-frontmatter-indexer.js +138 -0
- package/dist/server/services/pages-frontmatter-indexer.js.map +1 -0
- package/dist/server/services/pages-link-indexer.d.ts +36 -0
- package/dist/server/services/pages-link-indexer.js +474 -0
- package/dist/server/services/pages-link-indexer.js.map +1 -0
- package/dist/server/services/pages.d.ts +16 -0
- package/dist/server/services/pages.js +149 -0
- package/dist/server/services/pages.js.map +1 -0
- package/dist/server/services/plan.d.ts +59 -0
- package/dist/server/services/plan.js +459 -0
- package/dist/server/services/plan.js.map +1 -0
- package/dist/server/services/references.d.ts +17 -0
- package/dist/server/services/references.js +175 -0
- package/dist/server/services/references.js.map +1 -0
- package/dist/server/services/release.d.ts +146 -0
- package/dist/server/services/release.js +602 -0
- package/dist/server/services/release.js.map +1 -0
- package/dist/server/services/section-indexer.d.ts +20 -0
- package/dist/server/services/section-indexer.js +276 -0
- package/dist/server/services/section-indexer.js.map +1 -0
- package/dist/server/services/sections.d.ts +34 -0
- package/dist/server/services/sections.js +136 -0
- package/dist/server/services/sections.js.map +1 -0
- package/dist/server/services/skill-registry.d.ts +38 -0
- package/dist/server/services/skill-registry.js +171 -0
- package/dist/server/services/skill-registry.js.map +1 -0
- package/dist/server/services/slug.d.ts +7 -0
- package/dist/server/services/slug.js +41 -0
- package/dist/server/services/slug.js.map +1 -0
- package/dist/server/services/tags.d.ts +27 -0
- package/dist/server/services/tags.js +153 -0
- package/dist/server/services/tags.js.map +1 -0
- package/dist/server/services/todos-indexer.d.ts +21 -0
- package/dist/server/services/todos-indexer.js +123 -0
- package/dist/server/services/todos-indexer.js.map +1 -0
- package/dist/server/services/ui-view.d.ts +26 -0
- package/dist/server/services/ui-view.js +235 -0
- package/dist/server/services/ui-view.js.map +1 -0
- package/dist/server/services/versions.d.ts +59 -0
- package/dist/server/services/versions.js +181 -0
- package/dist/server/services/versions.js.map +1 -0
- package/dist/server/skills/brief-author/SKILL.md +117 -0
- package/dist/server/skills/layered-vertical-slices/SKILL.md +135 -0
- package/dist/server/skills/layered-vertical-slices/templates/index.md +97 -0
- package/dist/server/skills/layered-vertical-slices/templates/layer.md +42 -0
- package/dist/server/skills/layered-vertical-slices/templates/module.md +52 -0
- package/dist/server/skills/layered-vertical-slices/workflows/bootstrap.md +116 -0
- package/dist/server/skills/layered-vertical-slices/workflows/brief.md +154 -0
- package/dist/server/skills/layered-vertical-slices/workflows/daily.md +77 -0
- package/dist/server/ws/gateway.d.ts +10 -0
- package/dist/server/ws/gateway.js +35 -0
- package/dist/server/ws/gateway.js.map +1 -0
- package/dist/shared/anchor-pattern.d.ts +15 -0
- package/dist/shared/anchor-pattern.js +16 -0
- package/dist/shared/anchor-pattern.js.map +1 -0
- package/dist/shared/diagram-source-escape.d.ts +2 -0
- package/dist/shared/diagram-source-escape.js +19 -0
- package/dist/shared/diagram-source-escape.js.map +1 -0
- package/dist/shared/entities.d.ts +622 -0
- package/dist/shared/entities.js +9 -0
- package/dist/shared/entities.js.map +1 -0
- package/dist/shared/page-links.d.ts +40 -0
- package/dist/shared/page-links.js +2 -0
- package/dist/shared/page-links.js.map +1 -0
- package/dist/shared/plugin-host/types.d.ts +66 -0
- package/dist/shared/plugin-host/types.js +11 -0
- package/dist/shared/plugin-host/types.js.map +1 -0
- package/dist/shared/reference-extensions.d.ts +13 -0
- package/dist/shared/reference-extensions.js +17 -0
- package/dist/shared/reference-extensions.js.map +1 -0
- package/dist/shared/types.d.ts +86 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/xml-tags.d.ts +16 -0
- package/dist/shared/xml-tags.js +101 -0
- package/dist/shared/xml-tags.js.map +1 -0
- package/package.json +110 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
-- Etap: M10 — przejscie z 1:1 (plan.thread_id UNIQUE) na N:1 (chat_thread.plan_id).
|
|
2
|
+
-- Spec: .claude/skills/specyfikacja/db/db-m10-plans.md, db/db-m05-chat.md (sekcja planrefn1).
|
|
3
|
+
--
|
|
4
|
+
-- Strategia: table-recreate dla `plan` (drop kolumny thread_id + dodanie title) z deferred FK,
|
|
5
|
+
-- bo `chat_thread.plan_id` (nowa kolumna) trzyma FK na `plan.id`.
|
|
6
|
+
|
|
7
|
+
PRAGMA defer_foreign_keys = ON;
|
|
8
|
+
|
|
9
|
+
-- 1) Nowe kolumny w chat_thread.
|
|
10
|
+
ALTER TABLE chat_thread ADD COLUMN plan_id INTEGER REFERENCES plan(id) ON DELETE SET NULL;
|
|
11
|
+
ALTER TABLE chat_thread ADD COLUMN last_seen_plan_version INTEGER;
|
|
12
|
+
|
|
13
|
+
-- 2) Backfill ze starej kolumny plan.thread_id (1:1) na chat_thread.plan_id.
|
|
14
|
+
UPDATE chat_thread
|
|
15
|
+
SET plan_id = (SELECT id FROM plan WHERE plan.thread_id = chat_thread.id),
|
|
16
|
+
last_seen_plan_version = (SELECT current_version FROM plan WHERE plan.thread_id = chat_thread.id);
|
|
17
|
+
|
|
18
|
+
-- 3) Recreate `plan` bez thread_id, z opcjonalnym title.
|
|
19
|
+
-- Kolumna title jest NULL po INSERT — fixup w kodzie wyciaga pierwszy `# Heading` z content.
|
|
20
|
+
CREATE TABLE plan_new (
|
|
21
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
22
|
+
title TEXT,
|
|
23
|
+
content TEXT NOT NULL DEFAULT '',
|
|
24
|
+
current_version INTEGER NOT NULL DEFAULT 0,
|
|
25
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
26
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
INSERT INTO plan_new (id, content, current_version, created_at, updated_at)
|
|
30
|
+
SELECT id, content, current_version, created_at, updated_at FROM plan;
|
|
31
|
+
|
|
32
|
+
DROP TABLE plan;
|
|
33
|
+
ALTER TABLE plan_new RENAME TO plan;
|
|
34
|
+
|
|
35
|
+
-- 4) Indeks dla "Otworz ostatni watek tego planu" + threadCount per plan.
|
|
36
|
+
CREATE INDEX idx_chat_thread_plan ON chat_thread(plan_id);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-- M21 Briefs: generic context discriminator + brief file pointer on chat_thread.
|
|
2
|
+
-- Spec: db/db-m05-chat.md (sekcja m21chatcols), modules/m21-briefs.md, modules/m05-chat-agent.md (sekcja m05ctxreg).
|
|
3
|
+
--
|
|
4
|
+
-- context_type: 'chat' (default) | 'brief'. Determines system prompt skill,
|
|
5
|
+
-- MCP tools whitelist (routes/chat.ts) i UI chrome (overlay vs brief-detail).
|
|
6
|
+
-- Forward-compat: trzeci typ wymaga CHECK migration + registry entry.
|
|
7
|
+
--
|
|
8
|
+
-- brief_path: relative path to brief file under briefsDir (np. v0-3-to-v0-4.md).
|
|
9
|
+
-- Brak FK bo brief zyje na FS (plik moze byc usuniety/przeniesiony przez usera).
|
|
10
|
+
-- Invariant L2: context_type='brief' ⇒ brief_path IS NOT NULL ∧ plik istnieje
|
|
11
|
+
-- przy tworzeniu watku (egzekwowane w warstwie aplikacji, nie w DB).
|
|
12
|
+
|
|
13
|
+
ALTER TABLE chat_thread
|
|
14
|
+
ADD COLUMN context_type TEXT NOT NULL DEFAULT 'chat'
|
|
15
|
+
CHECK (context_type IN ('chat','brief'));
|
|
16
|
+
|
|
17
|
+
ALTER TABLE chat_thread
|
|
18
|
+
ADD COLUMN brief_path TEXT;
|
|
19
|
+
|
|
20
|
+
-- Indeks pod query "open threads for this brief" (GET /api/briefs/:path/threads)
|
|
21
|
+
-- oraz threadCount na liscie /briefs. Partial index — pomija watki 'chat'.
|
|
22
|
+
CREATE INDEX IF NOT EXISTS idx_chat_thread_brief_path
|
|
23
|
+
ON chat_thread(brief_path) WHERE brief_path IS NOT NULL;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
-- Wykluczenie briefów z release snapshot. Wcześniej `page_version` nie miała
|
|
2
|
+
-- dyskryminatora między stronami (pagesDir) a briefami (briefsDir) — `path`
|
|
3
|
+
-- jest relatywny do swojego rootDir, więc filtr po prefixie nie działa.
|
|
4
|
+
-- Spec: modules/m17-snapshots-releases.md (m17top001), modules/m21-briefs.md (m21db0001).
|
|
5
|
+
|
|
6
|
+
ALTER TABLE page_version
|
|
7
|
+
ADD COLUMN kind TEXT NOT NULL DEFAULT 'page'
|
|
8
|
+
CHECK (kind IN ('page','brief'));
|
|
9
|
+
|
|
10
|
+
-- Backfill po frontmatter.type w polu data (JSON snapshot).
|
|
11
|
+
-- Tombstone'y op='delete' z pustym frontmatter zostają jako 'page' — akceptowalne
|
|
12
|
+
-- (rzadkie, łatwe do ręcznej korekty jeśli wystąpią; brief 'delete' tombstone
|
|
13
|
+
-- ma frontmatter z poprzedniej wersji bo synthesizeDeleteFromLastVersion
|
|
14
|
+
-- klonuje ostatni snapshot).
|
|
15
|
+
UPDATE page_version
|
|
16
|
+
SET kind = 'brief'
|
|
17
|
+
WHERE json_extract(data, '$.frontmatter.type') = 'brief';
|
|
18
|
+
|
|
19
|
+
-- Odpięcie historycznych briefów od release'ów do których wpadły przed fixem.
|
|
20
|
+
-- Nowy kontrakt: żaden release nie zawiera briefów (ani nowy, ani legacy).
|
|
21
|
+
UPDATE page_version
|
|
22
|
+
SET release_id = NULL
|
|
23
|
+
WHERE kind = 'brief';
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_page_version_kind_release
|
|
26
|
+
ON page_version (kind, release_id);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- Etap: agent-chat 0.1.1 — `contextSize` jako oddzielna metryka od `usage` (billing).
|
|
2
|
+
-- `usage` (last_usage_json / usage_json) sumuje się przez tury — nie nadaje się na
|
|
3
|
+
-- pasek "X / 200k" (przekraczał 100% w dłuższych rozmowach). `contextSize` to
|
|
4
|
+
-- okno kontekstu po tej turze (last-turn, NIE sumować). Wire-event `result`
|
|
5
|
+
-- z agent-adapters niesie je obok `usage`; tu trzymamy je per-tura i thread-level.
|
|
6
|
+
--
|
|
7
|
+
-- Backward-compat: stare wątki mają NULL — klient liczy fallback z usage.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE chat_thread ADD COLUMN last_context_size INTEGER;
|
|
10
|
+
ALTER TABLE chat_message ADD COLUMN context_size INTEGER;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- v0.1.13 — Acceptance Criteria entity (M11)
|
|
2
|
+
-- AC = first-class entity. Polymorphic entity_tag (001_endpoint.sql) i polymorphic
|
|
3
|
+
-- entity_version (017_entity_version_m17.sql) automatycznie obsluguja
|
|
4
|
+
-- entity_type='ac' bez dodatkowych zmian.
|
|
5
|
+
|
|
6
|
+
CREATE TABLE IF NOT EXISTS ac (
|
|
7
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
8
|
+
slug TEXT NOT NULL UNIQUE,
|
|
9
|
+
text TEXT NOT NULL,
|
|
10
|
+
kind TEXT NOT NULL DEFAULT 'requirement',
|
|
11
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
12
|
+
verifies TEXT NOT NULL DEFAULT '[]',
|
|
13
|
+
description TEXT,
|
|
14
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
15
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_ac_status ON ac(status);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_ac_kind ON ac(kind);
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
-- v0.1.15 — 14 startowych Acceptance Criteria pokrywających M06 / M19 / M20.
|
|
2
|
+
-- Każdy AC seedowany pod istniejące moduły: kind='requirement', status='active',
|
|
3
|
+
-- plus tag mNN wiążący z modułem.
|
|
4
|
+
-- Idempotent — INSERT OR IGNORE na (ac.slug UNIQUE) i (entity_tag UNIQUE).
|
|
5
|
+
|
|
6
|
+
INSERT OR IGNORE INTO tag (slug, name) VALUES ('m06', 'm06');
|
|
7
|
+
INSERT OR IGNORE INTO tag (slug, name) VALUES ('m19', 'm19');
|
|
8
|
+
INSERT OR IGNORE INTO tag (slug, name) VALUES ('m20', 'm20');
|
|
9
|
+
|
|
10
|
+
INSERT OR IGNORE INTO ac (slug, text, kind, status, verifies) VALUES
|
|
11
|
+
('m06-anchor-length-contract',
|
|
12
|
+
'Anchory generowane przez section indexer mają dokładnie 8 znaków z alfabetu [a-z0-9]; walidacja/parsing akceptuje 6-12 znaków (manualne semantyczne anchory).',
|
|
13
|
+
'requirement', 'active', '[]'),
|
|
14
|
+
('m06-section-indexer-auto-injection',
|
|
15
|
+
'Section indexer auto-injectuje anchor comments do nagłówków bez anchora; nie modyfikuje nagłówków, które już mają anchor.',
|
|
16
|
+
'requirement', 'active', '[]'),
|
|
17
|
+
('m06-section-ref-chip-rendering',
|
|
18
|
+
'<section_ref anchor="X"/> renderuje się jako klikalny chip z heading text i page path; broken anchor (brak w section_index) renderuje broken chip.',
|
|
19
|
+
'requirement', 'active', '[]'),
|
|
20
|
+
|
|
21
|
+
('m19-find-references-include-tag-matches',
|
|
22
|
+
'find_references(type, slug, { includeTagMatches: true }) zwraca dynamic refs ze stron z <tagged_list/> i <tagged_list_mixed/>, których atrybut tags przecina się z tagami encji; pole via[] obecne tylko dla dynamic rows.',
|
|
23
|
+
'requirement', 'active', '[]'),
|
|
24
|
+
('m19-tagged-list-type-mismatch-skipped',
|
|
25
|
+
'<tagged_list type="X"/> z type różnym od typu szukanej encji jest pomijany w find_references({includeTagMatches:true}) — embed nie pokazałby tej encji.',
|
|
26
|
+
'requirement', 'active', '[]'),
|
|
27
|
+
('m19-untagged-entity-no-op',
|
|
28
|
+
'Encja bez żadnego tagu w find_references({includeTagMatches:true}) → no-op (intersect zawsze pusty, brak dynamic rows w output).',
|
|
29
|
+
'requirement', 'active', '[]'),
|
|
30
|
+
|
|
31
|
+
('m20-three-editor-contexts',
|
|
32
|
+
'EditorFactory wspiera trzy konteksty edytora: page (pełny markdown), description (markdown bez task lists), plan (markdown + XML chips); każdy z osobnym mention sources rejestrem.',
|
|
33
|
+
'requirement', 'active', '[]'),
|
|
34
|
+
('m20-editor-factory-create',
|
|
35
|
+
'EditorFactory.create(contextId, initial) zwraca tiptap Editor zhydratowany dla danego kontekstu z initial content jako markdown string.',
|
|
36
|
+
'requirement', 'active', '[]'),
|
|
37
|
+
('m20-markdown-it-xml-rules',
|
|
38
|
+
'markdown-it ma custom rules xml_inline, xml_block, xml_block_content rozpoznające 6 nazw XML reference tags (inline_mention, single_element, element_list, tagged_list, tagged_list_mixed, section_ref).',
|
|
39
|
+
'requirement', 'active', '[]'),
|
|
40
|
+
('m20-xml-inline-dispatch-six-tags',
|
|
41
|
+
'xml_inline markdown-it rule dispatcher mapuje wszystkie 6 tag names na odpowiednie tiptap node types (5 z M19 + section_ref jako extension reference).',
|
|
42
|
+
'requirement', 'active', '[]'),
|
|
43
|
+
('m20-gfm-task-lists',
|
|
44
|
+
'Edytor wspiera GFM task lists (- [x] checked / - [ ] unchecked) z renderowaniem checkboxów i toggle przy kliknięciu.',
|
|
45
|
+
'requirement', 'active', '[]'),
|
|
46
|
+
('m20-five-generic-m19-nodes',
|
|
47
|
+
'Pięć generycznych tiptap nodów M19 (InlineMentionNode, SingleElementNode, ElementListNode, TaggedListNode, TaggedListMixedNode) deleguje render do clientPluginHost.getEntity(type).renderChip / renderCard.',
|
|
48
|
+
'requirement', 'active', '[]'),
|
|
49
|
+
('m20-outline-gutter',
|
|
50
|
+
'Outline gutter pokazuje listę sekcji strony z anchor + heading text; klik w pozycji scrolluje edytor do anchor i podświetla wiersz.',
|
|
51
|
+
'requirement', 'active', '[]'),
|
|
52
|
+
('m20-ws-query-keys',
|
|
53
|
+
'WebSocket events broadcastują invalidation keys mapujące na konkretne tanstack-query query keys; useChat / useEntityList nasłuchują i invalidują tylko zmienione zapytania.',
|
|
54
|
+
'requirement', 'active', '[]');
|
|
55
|
+
|
|
56
|
+
-- Wiązanie AC z tagami modułów. SELECT-based pattern — działa bez względu na
|
|
57
|
+
-- to, czy INSERT OR IGNORE wyżej wstawił nowy wiersz czy ominął istniejący.
|
|
58
|
+
INSERT OR IGNORE INTO entity_tag (entity_type, entity_id, tag_id)
|
|
59
|
+
SELECT 'ac', a.id, t.id FROM ac a, tag t
|
|
60
|
+
WHERE (a.slug, t.slug) IN (
|
|
61
|
+
('m06-anchor-length-contract', 'm06'),
|
|
62
|
+
('m06-section-indexer-auto-injection', 'm06'),
|
|
63
|
+
('m06-section-ref-chip-rendering', 'm06'),
|
|
64
|
+
('m19-find-references-include-tag-matches', 'm19'),
|
|
65
|
+
('m19-tagged-list-type-mismatch-skipped', 'm19'),
|
|
66
|
+
('m19-untagged-entity-no-op', 'm19'),
|
|
67
|
+
('m20-three-editor-contexts', 'm20'),
|
|
68
|
+
('m20-editor-factory-create', 'm20'),
|
|
69
|
+
('m20-markdown-it-xml-rules', 'm20'),
|
|
70
|
+
('m20-xml-inline-dispatch-six-tags', 'm20'),
|
|
71
|
+
('m20-gfm-task-lists', 'm20'),
|
|
72
|
+
('m20-five-generic-m19-nodes', 'm20'),
|
|
73
|
+
('m20-outline-gutter', 'm20'),
|
|
74
|
+
('m20-ws-query-keys', 'm20')
|
|
75
|
+
);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
-- M21 Briefs (v0.1.21+) — kolumna `change_summary` na page_version.
|
|
2
|
+
-- Brief pkt 11 "For implementers": każda mutacja musi się przelać przez
|
|
3
|
+
-- page_version z `changeSummary` (dla PUT pochodzi z body, dla PATCH
|
|
4
|
+
-- implemented toggle wystarczy 'set implemented=<bool>').
|
|
5
|
+
--
|
|
6
|
+
-- Wcześniej DTO `BriefContentUpdateRequest.changeSummary` był przyjmowany
|
|
7
|
+
-- przez route, ale gubiony w service layer — brak miejsca w DB do zapisu.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE page_version
|
|
10
|
+
ADD COLUMN change_summary TEXT NULL;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
export declare class ReadonlyDbError extends Error {
|
|
3
|
+
code: 'PROJECT_NOT_FOUND' | 'SCHEMA_OUT_OF_DATE';
|
|
4
|
+
hint?: string | undefined;
|
|
5
|
+
constructor(code: 'PROJECT_NOT_FOUND' | 'SCHEMA_OUT_OF_DATE', message: string, hint?: string | undefined);
|
|
6
|
+
}
|
|
7
|
+
export interface OpenDbReadonlyResult {
|
|
8
|
+
handle: Database.Database;
|
|
9
|
+
dbPath: string;
|
|
10
|
+
close: () => void;
|
|
11
|
+
}
|
|
12
|
+
export declare function openDbReadonly(projectDir: string): OpenDbReadonlyResult;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import Database from 'better-sqlite3';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
export class ReadonlyDbError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
hint;
|
|
7
|
+
constructor(code, message, hint) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.code = code;
|
|
10
|
+
this.hint = hint;
|
|
11
|
+
this.name = 'ReadonlyDbError';
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function openDbReadonly(projectDir) {
|
|
15
|
+
const dbPath = path.join(projectDir, '.claude4spec', 'db.sqlite');
|
|
16
|
+
if (!fs.existsSync(dbPath)) {
|
|
17
|
+
throw new ReadonlyDbError('PROJECT_NOT_FOUND', `no claude4spec project found at ${projectDir}`, 'run `npx claude4spec` first or pass `--project <path>`');
|
|
18
|
+
}
|
|
19
|
+
let handle;
|
|
20
|
+
try {
|
|
21
|
+
handle = new Database(dbPath, { readonly: true, fileMustExist: true });
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
throw new ReadonlyDbError('PROJECT_NOT_FOUND', `failed to open ${dbPath}: ${err.message}`);
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
handle,
|
|
28
|
+
dbPath,
|
|
29
|
+
close: () => handle.close(),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=readonly.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readonly.js","sourceRoot":"","sources":["../../../src/server/db/readonly.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACrB;IAA0E;IAA7F,YAAmB,IAAgD,EAAE,OAAe,EAAS,IAAa;QACxG,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,SAAI,GAAJ,IAAI,CAA4C;QAA0B,SAAI,GAAJ,IAAI,CAAS;QAExG,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAQD,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,mCAAmC,UAAU,EAAE,EAC/C,wDAAwD,CACzD,CAAC;IACJ,CAAC;IACD,IAAI,MAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,eAAe,CACvB,mBAAmB,EACnB,kBAAkB,MAAM,KAAM,GAAa,CAAC,OAAO,EAAE,CACtD,CAAC;IACJ,CAAC;IACD,OAAO;QACL,MAAM;QACN,MAAM;QACN,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;KAC5B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export type RawEntityType = 'endpoint' | 'dto' | 'database-table' | 'ui-view' | 'ac';
|
|
3
|
+
export interface RawEntity {
|
|
4
|
+
type: RawEntityType;
|
|
5
|
+
id: number;
|
|
6
|
+
slug: string;
|
|
7
|
+
data: Record<string, unknown>;
|
|
8
|
+
tags: string[];
|
|
9
|
+
}
|
|
10
|
+
export interface RawSection {
|
|
11
|
+
anchor: string;
|
|
12
|
+
pagePath: string;
|
|
13
|
+
headingPath: string;
|
|
14
|
+
headingSlug: string;
|
|
15
|
+
headingText: string;
|
|
16
|
+
headingLevel: number;
|
|
17
|
+
lineStart: number;
|
|
18
|
+
lineEnd: number;
|
|
19
|
+
}
|
|
20
|
+
/** Per-entity-type counts. Keys are plugin types; absent type = 0. */
|
|
21
|
+
export type RawTagCounts = Record<string, number>;
|
|
22
|
+
export interface RawTag {
|
|
23
|
+
slug: string;
|
|
24
|
+
name: string;
|
|
25
|
+
color: string | null;
|
|
26
|
+
description: string | null;
|
|
27
|
+
counts: RawTagCounts;
|
|
28
|
+
}
|
|
29
|
+
export interface FindByTagParams {
|
|
30
|
+
type?: RawEntityType;
|
|
31
|
+
tags: string[];
|
|
32
|
+
filter: 'and' | 'or';
|
|
33
|
+
}
|
|
34
|
+
export interface SectionEntityRef {
|
|
35
|
+
anchor: string;
|
|
36
|
+
pagePath: string;
|
|
37
|
+
headingText: string;
|
|
38
|
+
relation: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function isRawEntityType(value: string): value is RawEntityType;
|
|
41
|
+
export declare class RawEntityReader {
|
|
42
|
+
private db;
|
|
43
|
+
constructor(db: Database.Database);
|
|
44
|
+
getEntity(type: RawEntityType, slug: string): RawEntity | null;
|
|
45
|
+
getEntityById(type: RawEntityType, id: number): RawEntity | null;
|
|
46
|
+
getEntities(type: RawEntityType, slugs: string[]): {
|
|
47
|
+
items: RawEntity[];
|
|
48
|
+
missing: string[];
|
|
49
|
+
};
|
|
50
|
+
findByTag(params: FindByTagParams): RawEntity[];
|
|
51
|
+
private findByTagForType;
|
|
52
|
+
getSection(anchor: string): RawSection | null;
|
|
53
|
+
listTypes(): RawEntityType[];
|
|
54
|
+
listSlugs(type: RawEntityType): string[];
|
|
55
|
+
listTags(): RawTag[];
|
|
56
|
+
/** Returns sections that referenced the given entity (populated by section-indexer). */
|
|
57
|
+
findSectionReferences(type: RawEntityType, entityId: number): SectionEntityRef[];
|
|
58
|
+
/** Endpoint-DTO links (denormalised). */
|
|
59
|
+
findEndpointDtos(endpointId: number): Array<{
|
|
60
|
+
dtoSlug: string;
|
|
61
|
+
dtoName: string;
|
|
62
|
+
relation: string;
|
|
63
|
+
statusCode: number | null;
|
|
64
|
+
}>;
|
|
65
|
+
/** Reverse: endpoints linked to a DTO. */
|
|
66
|
+
findDtoEndpoints(dtoId: number): Array<{
|
|
67
|
+
endpointSlug: string;
|
|
68
|
+
method: string;
|
|
69
|
+
path: string;
|
|
70
|
+
relation: string;
|
|
71
|
+
statusCode: number | null;
|
|
72
|
+
}>;
|
|
73
|
+
private hydrate;
|
|
74
|
+
private hydrateSection;
|
|
75
|
+
private getEntityTagSlugs;
|
|
76
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
const ENTITY_TABLES = {
|
|
2
|
+
endpoint: 'endpoint',
|
|
3
|
+
dto: 'dto',
|
|
4
|
+
'database-table': 'database_table',
|
|
5
|
+
'ui-view': 'ui_view',
|
|
6
|
+
ac: 'ac',
|
|
7
|
+
};
|
|
8
|
+
const ALL_ENTITY_TYPES = ['endpoint', 'dto', 'database-table', 'ui-view', 'ac'];
|
|
9
|
+
export function isRawEntityType(value) {
|
|
10
|
+
return (value === 'endpoint' ||
|
|
11
|
+
value === 'dto' ||
|
|
12
|
+
value === 'database-table' ||
|
|
13
|
+
value === 'ui-view' ||
|
|
14
|
+
value === 'ac');
|
|
15
|
+
}
|
|
16
|
+
export class RawEntityReader {
|
|
17
|
+
db;
|
|
18
|
+
constructor(db) {
|
|
19
|
+
this.db = db;
|
|
20
|
+
}
|
|
21
|
+
getEntity(type, slug) {
|
|
22
|
+
const table = ENTITY_TABLES[type];
|
|
23
|
+
const row = this.db.prepare(`SELECT * FROM ${table} WHERE slug = ?`).get(slug);
|
|
24
|
+
if (!row)
|
|
25
|
+
return null;
|
|
26
|
+
return this.hydrate(type, row);
|
|
27
|
+
}
|
|
28
|
+
getEntityById(type, id) {
|
|
29
|
+
const table = ENTITY_TABLES[type];
|
|
30
|
+
const row = this.db.prepare(`SELECT * FROM ${table} WHERE id = ?`).get(id);
|
|
31
|
+
if (!row)
|
|
32
|
+
return null;
|
|
33
|
+
return this.hydrate(type, row);
|
|
34
|
+
}
|
|
35
|
+
getEntities(type, slugs) {
|
|
36
|
+
const items = [];
|
|
37
|
+
const missing = [];
|
|
38
|
+
for (const slug of slugs) {
|
|
39
|
+
const entity = this.getEntity(type, slug);
|
|
40
|
+
if (entity)
|
|
41
|
+
items.push(entity);
|
|
42
|
+
else
|
|
43
|
+
missing.push(slug);
|
|
44
|
+
}
|
|
45
|
+
return { items, missing };
|
|
46
|
+
}
|
|
47
|
+
findByTag(params) {
|
|
48
|
+
const tagSlugs = params.tags.filter(Boolean);
|
|
49
|
+
if (!tagSlugs.length)
|
|
50
|
+
return [];
|
|
51
|
+
const types = params.type ? [params.type] : ALL_ENTITY_TYPES;
|
|
52
|
+
const out = [];
|
|
53
|
+
for (const type of types) {
|
|
54
|
+
out.push(...this.findByTagForType(type, tagSlugs, params.filter));
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
findByTagForType(type, tagSlugs, filter) {
|
|
59
|
+
const table = ENTITY_TABLES[type];
|
|
60
|
+
const placeholders = tagSlugs.map(() => '?').join(',');
|
|
61
|
+
let sql;
|
|
62
|
+
const params = [];
|
|
63
|
+
if (filter === 'and') {
|
|
64
|
+
sql = `
|
|
65
|
+
SELECT e.* FROM ${table} e
|
|
66
|
+
WHERE e.id IN (
|
|
67
|
+
SELECT et.entity_id
|
|
68
|
+
FROM entity_tag et
|
|
69
|
+
JOIN tag t ON t.id = et.tag_id
|
|
70
|
+
WHERE et.entity_type = ? AND t.slug IN (${placeholders})
|
|
71
|
+
GROUP BY et.entity_id
|
|
72
|
+
HAVING COUNT(DISTINCT t.slug) = ?
|
|
73
|
+
)
|
|
74
|
+
ORDER BY e.slug
|
|
75
|
+
`;
|
|
76
|
+
params.push(type, ...tagSlugs, tagSlugs.length);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
sql = `
|
|
80
|
+
SELECT e.* FROM ${table} e
|
|
81
|
+
WHERE e.id IN (
|
|
82
|
+
SELECT et.entity_id FROM entity_tag et
|
|
83
|
+
JOIN tag t ON t.id = et.tag_id
|
|
84
|
+
WHERE et.entity_type = ? AND t.slug IN (${placeholders})
|
|
85
|
+
)
|
|
86
|
+
ORDER BY e.slug
|
|
87
|
+
`;
|
|
88
|
+
params.push(type, ...tagSlugs);
|
|
89
|
+
}
|
|
90
|
+
const rows = this.db.prepare(sql).all(...params);
|
|
91
|
+
return rows.map((row) => this.hydrate(type, row));
|
|
92
|
+
}
|
|
93
|
+
getSection(anchor) {
|
|
94
|
+
const row = this.db
|
|
95
|
+
.prepare('SELECT * FROM section_index WHERE anchor = ?')
|
|
96
|
+
.get(anchor);
|
|
97
|
+
if (!row)
|
|
98
|
+
return null;
|
|
99
|
+
return this.hydrateSection(row);
|
|
100
|
+
}
|
|
101
|
+
listTypes() {
|
|
102
|
+
return [...ALL_ENTITY_TYPES];
|
|
103
|
+
}
|
|
104
|
+
listSlugs(type) {
|
|
105
|
+
const table = ENTITY_TABLES[type];
|
|
106
|
+
const rows = this.db
|
|
107
|
+
.prepare(`SELECT slug FROM ${table} ORDER BY slug`)
|
|
108
|
+
.all();
|
|
109
|
+
return rows.map((r) => r.slug);
|
|
110
|
+
}
|
|
111
|
+
listTags() {
|
|
112
|
+
const rows = this.db.prepare(`SELECT * FROM tag ORDER BY name`).all();
|
|
113
|
+
const countRows = this.db
|
|
114
|
+
.prepare(`SELECT t.slug AS slug, et.entity_type AS entity_type, COUNT(*) AS c
|
|
115
|
+
FROM entity_tag et
|
|
116
|
+
JOIN tag t ON t.id = et.tag_id
|
|
117
|
+
GROUP BY t.slug, et.entity_type`)
|
|
118
|
+
.all();
|
|
119
|
+
const countMap = new Map();
|
|
120
|
+
for (const row of countRows) {
|
|
121
|
+
const entry = countMap.get(row.slug) ?? {};
|
|
122
|
+
entry[row.entity_type] = row.c;
|
|
123
|
+
countMap.set(row.slug, entry);
|
|
124
|
+
}
|
|
125
|
+
return rows.map((r) => ({
|
|
126
|
+
slug: r.slug,
|
|
127
|
+
name: r.name,
|
|
128
|
+
color: r.color,
|
|
129
|
+
description: r.description,
|
|
130
|
+
counts: countMap.get(r.slug) ?? { endpoint: 0, dto: 0, 'database-table': 0, 'ui-view': 0, ac: 0 },
|
|
131
|
+
}));
|
|
132
|
+
}
|
|
133
|
+
/** Returns sections that referenced the given entity (populated by section-indexer). */
|
|
134
|
+
findSectionReferences(type, entityId) {
|
|
135
|
+
const rows = this.db
|
|
136
|
+
.prepare(`SELECT sel.anchor AS anchor, sel.relation AS relation,
|
|
137
|
+
si.page_path AS page_path, si.heading_text AS heading_text
|
|
138
|
+
FROM section_entity_link sel
|
|
139
|
+
JOIN section_index si ON si.anchor = sel.anchor
|
|
140
|
+
WHERE sel.entity_type = ? AND sel.entity_id = ?
|
|
141
|
+
ORDER BY si.page_path, si.line_start`)
|
|
142
|
+
.all(type, entityId);
|
|
143
|
+
return rows.map((r) => ({
|
|
144
|
+
anchor: r.anchor,
|
|
145
|
+
pagePath: r.page_path,
|
|
146
|
+
headingText: r.heading_text,
|
|
147
|
+
relation: r.relation,
|
|
148
|
+
}));
|
|
149
|
+
}
|
|
150
|
+
/** Endpoint-DTO links (denormalised). */
|
|
151
|
+
findEndpointDtos(endpointId) {
|
|
152
|
+
const rows = this.db
|
|
153
|
+
.prepare(`SELECT d.slug AS dto_slug, d.name AS dto_name,
|
|
154
|
+
ed.relation AS relation, ed.status_code AS status_code
|
|
155
|
+
FROM endpoint_dto ed
|
|
156
|
+
JOIN dto d ON d.id = ed.dto_id
|
|
157
|
+
WHERE ed.endpoint_id = ?
|
|
158
|
+
ORDER BY ed.relation, ed.status_code, d.name`)
|
|
159
|
+
.all(endpointId);
|
|
160
|
+
return rows.map((r) => ({
|
|
161
|
+
dtoSlug: r.dto_slug,
|
|
162
|
+
dtoName: r.dto_name,
|
|
163
|
+
relation: r.relation,
|
|
164
|
+
statusCode: r.status_code,
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
/** Reverse: endpoints linked to a DTO. */
|
|
168
|
+
findDtoEndpoints(dtoId) {
|
|
169
|
+
const rows = this.db
|
|
170
|
+
.prepare(`SELECT e.slug AS slug, e.method AS method, e.path AS path,
|
|
171
|
+
ed.relation AS relation, ed.status_code AS status_code
|
|
172
|
+
FROM endpoint_dto ed
|
|
173
|
+
JOIN endpoint e ON e.id = ed.endpoint_id
|
|
174
|
+
WHERE ed.dto_id = ?
|
|
175
|
+
ORDER BY ed.relation, ed.status_code, e.path`)
|
|
176
|
+
.all(dtoId);
|
|
177
|
+
return rows.map((r) => ({
|
|
178
|
+
endpointSlug: r.slug,
|
|
179
|
+
method: r.method,
|
|
180
|
+
path: r.path,
|
|
181
|
+
relation: r.relation,
|
|
182
|
+
statusCode: r.status_code,
|
|
183
|
+
}));
|
|
184
|
+
}
|
|
185
|
+
hydrate(type, row) {
|
|
186
|
+
const id = row.id;
|
|
187
|
+
const slug = row.slug;
|
|
188
|
+
const tags = this.getEntityTagSlugs(type, id);
|
|
189
|
+
const data = {};
|
|
190
|
+
for (const [key, value] of Object.entries(row)) {
|
|
191
|
+
if (key === 'id' || key === 'created_at' || key === 'updated_at')
|
|
192
|
+
continue;
|
|
193
|
+
data[key] = value;
|
|
194
|
+
}
|
|
195
|
+
// Generic JSON column hydration: any string column whose value parses as
|
|
196
|
+
// a JSON array/object gets decoded. Replaces per-entity-type branches
|
|
197
|
+
// (dto.fields, dto.examples, database-table.columns/indexes, ui-view.params).
|
|
198
|
+
for (const [key, value] of Object.entries(data)) {
|
|
199
|
+
if (typeof value !== 'string')
|
|
200
|
+
continue;
|
|
201
|
+
const trimmed = value.trimStart();
|
|
202
|
+
if (!trimmed.startsWith('[') && !trimmed.startsWith('{'))
|
|
203
|
+
continue;
|
|
204
|
+
data[key] = safeJsonArray(value);
|
|
205
|
+
}
|
|
206
|
+
return { type, id, slug, data, tags };
|
|
207
|
+
}
|
|
208
|
+
hydrateSection(row) {
|
|
209
|
+
return {
|
|
210
|
+
anchor: row.anchor,
|
|
211
|
+
pagePath: row.page_path,
|
|
212
|
+
headingPath: row.heading_path,
|
|
213
|
+
headingSlug: row.heading_slug,
|
|
214
|
+
headingText: row.heading_text,
|
|
215
|
+
headingLevel: row.heading_level,
|
|
216
|
+
lineStart: row.line_start,
|
|
217
|
+
lineEnd: row.line_end,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
getEntityTagSlugs(type, entityId) {
|
|
221
|
+
const rows = this.db
|
|
222
|
+
.prepare(`SELECT t.slug AS slug
|
|
223
|
+
FROM entity_tag et
|
|
224
|
+
JOIN tag t ON t.id = et.tag_id
|
|
225
|
+
WHERE et.entity_type = ? AND et.entity_id = ?
|
|
226
|
+
ORDER BY t.name`)
|
|
227
|
+
.all(type, entityId);
|
|
228
|
+
return rows.map((r) => r.slug);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function safeJsonArray(raw) {
|
|
232
|
+
try {
|
|
233
|
+
const parsed = JSON.parse(raw);
|
|
234
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=raw-entity-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raw-entity-reader.js","sourceRoot":"","sources":["../../../src/server/domain/raw-entity-reader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type McpServerInstance } from '@inharness-ai/agent-adapters';
|
|
2
|
+
import type { AcService } from './services.js';
|
|
3
|
+
import type { ReferencesService } from '../../services/references.js';
|
|
4
|
+
import type { WsGateway } from '../../ws/gateway.js';
|
|
5
|
+
export interface AcToolsDeps {
|
|
6
|
+
acService: AcService;
|
|
7
|
+
referencesService: ReferencesService;
|
|
8
|
+
ws: WsGateway;
|
|
9
|
+
}
|
|
10
|
+
export declare function createAcToolsServer(deps: AcToolsDeps): McpServerInstance;
|