@rashidee/co2 1.3.24 → 1.3.27

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.
Files changed (67) hide show
  1. package/dist/.co2-dat/app.db +0 -0
  2. package/dist/.co2-dat/app.db-shm +0 -0
  3. package/dist/.co2-dat/app.db-wal +0 -0
  4. package/dist/index.js +173 -29
  5. package/package.json +41 -41
  6. package/static/assets/{abnfDiagram-VRR7QNED-B_fP8Vz_.js → abnfDiagram-VRR7QNED-BqqVu83_.js} +1 -1
  7. package/static/assets/{arc-jQ2jhD3o.js → arc-D9zT1NvB.js} +1 -1
  8. package/static/assets/{architectureDiagram-ZJ3FMSHR-CEunclu9.js → architectureDiagram-ZJ3FMSHR-D-34OZne.js} +1 -1
  9. package/static/assets/{blockDiagram-677ZJIJ3-DpbPXGGb.js → blockDiagram-677ZJIJ3-DzXrZXuu.js} +1 -1
  10. package/static/assets/{c4Diagram-LMCZKHZV-BMJArETU.js → c4Diagram-LMCZKHZV-CZWILWBU.js} +1 -1
  11. package/static/assets/channel-DKYjk4Z0.js +1 -0
  12. package/static/assets/{chunk-2Q5K7J3B-DWwnQ9gu.js → chunk-2Q5K7J3B-BnyVGcHp.js} +1 -1
  13. package/static/assets/{chunk-32BRIVSS-mIi65b4i.js → chunk-32BRIVSS-D6kWVoTq.js} +1 -1
  14. package/static/assets/{chunk-5VM5RSS4-BDyMPvwt.js → chunk-5VM5RSS4-BDuQxGsi.js} +1 -1
  15. package/static/assets/{chunk-EX3LRPZG-Cfspbnh5.js → chunk-EX3LRPZG-CzemsC9C.js} +1 -1
  16. package/static/assets/{chunk-JWPE2WC7-277KBuwS.js → chunk-JWPE2WC7-D9BTDnXt.js} +1 -1
  17. package/static/assets/{chunk-MOJQB5TN-ctV9LaAX.js → chunk-MOJQB5TN-DMVlpoSf.js} +1 -1
  18. package/static/assets/{chunk-RYQCIY6F-CK9NdxUZ.js → chunk-RYQCIY6F-Cr59tI34.js} +1 -1
  19. package/static/assets/{chunk-V7JOEXUC-CurUrryl.js → chunk-V7JOEXUC-CItFH4TC.js} +1 -1
  20. package/static/assets/{chunk-VR4S4FIN-C6HOhkwt.js → chunk-VR4S4FIN-D-5bD2Rp.js} +1 -1
  21. package/static/assets/{chunk-XXDRQBXY-C09MJsiF.js → chunk-XXDRQBXY-BYTedp-b.js} +1 -1
  22. package/static/assets/classDiagram-OUVF2IWQ-BypGwdom.js +1 -0
  23. package/static/assets/classDiagram-v2-EOCWNBFH-BypGwdom.js +1 -0
  24. package/static/assets/{cose-bilkent-JH36ORCC-ET_pJkh9.js → cose-bilkent-JH36ORCC-ph9z6Rag.js} +1 -1
  25. package/static/assets/{cynefin-VYW2F7L2-B6Oy4mbg.js → cynefin-VYW2F7L2-DNym54iM.js} +1 -1
  26. package/static/assets/{cynefinDiagram-TSTJHNR4-Br7gbIt6.js → cynefinDiagram-TSTJHNR4-BFhXROr4.js} +1 -1
  27. package/static/assets/{dagre-VKFMJZFB-CGRMVLrv.js → dagre-VKFMJZFB-C8Bvbfep.js} +1 -1
  28. package/static/assets/{diagram-FQU43EPY-Dasgaqiu.js → diagram-FQU43EPY-dou1k9fZ.js} +1 -1
  29. package/static/assets/{diagram-G47NLZAW-DZqXpbK0.js → diagram-G47NLZAW-DTVkGSut.js} +1 -1
  30. package/static/assets/{diagram-NH7WQ7WH-Cjp8mQVX.js → diagram-NH7WQ7WH-CLF_alfd.js} +1 -1
  31. package/static/assets/{diagram-OA4YK3LP-BHpTOief.js → diagram-OA4YK3LP-CVQqfvRy.js} +1 -1
  32. package/static/assets/{diagram-WEI45ONY-BdjsSjwC.js → diagram-WEI45ONY-X6ugzDOD.js} +1 -1
  33. package/static/assets/{ebnfDiagram-CCIWWBDH-D3GJit-t.js → ebnfDiagram-CCIWWBDH-PgskU8v_.js} +1 -1
  34. package/static/assets/{erDiagram-Q63AITRT-CbreGRUM.js → erDiagram-Q63AITRT-CBW5aC2C.js} +1 -1
  35. package/static/assets/{flowDiagram-23GEKE2U-Bov8ggVs.js → flowDiagram-23GEKE2U-BbyDOz5x.js} +1 -1
  36. package/static/assets/{ganttDiagram-NO4QXBWP-DI2TRBdA.js → ganttDiagram-NO4QXBWP-CceMROcR.js} +1 -1
  37. package/static/assets/{gitGraphDiagram-IHSO6WYX-CB0I9Jzz.js → gitGraphDiagram-IHSO6WYX-t2R0tkUO.js} +1 -1
  38. package/static/assets/{index-D58A6Kf1.css → index-BM5AGe_l.css} +1 -1
  39. package/static/assets/{index-DHqZVy2E.js → index-C26387Mq.js} +171 -171
  40. package/static/assets/{infoDiagram-FWYZ7A6U-DrF8yTwW.js → infoDiagram-FWYZ7A6U-Du1gMFcI.js} +1 -1
  41. package/static/assets/{ishikawaDiagram-FXEZZL3T-DUB8-IzB.js → ishikawaDiagram-FXEZZL3T-VAYbdalo.js} +1 -1
  42. package/static/assets/{journeyDiagram-5HDEW3XC-BRfaIEic.js → journeyDiagram-5HDEW3XC-DkLYEpM2.js} +1 -1
  43. package/static/assets/{kanban-definition-HUTT4EX6-BSSDB9_O.js → kanban-definition-HUTT4EX6-BCzd09tX.js} +1 -1
  44. package/static/assets/{linear-oOGNCaPt.js → linear-Dm0uNoIF.js} +1 -1
  45. package/static/assets/{mindmap-definition-LN4V7U3C-D7f8ON4e.js → mindmap-definition-LN4V7U3C-D69_xTUO.js} +1 -1
  46. package/static/assets/{pegDiagram-2B236MQR-BWLmrzb8.js → pegDiagram-2B236MQR-D6t8-mr5.js} +1 -1
  47. package/static/assets/{pieDiagram-ENE6RG2P-DcXwgn9I.js → pieDiagram-ENE6RG2P-CRhMSL7L.js} +1 -1
  48. package/static/assets/{quadrantDiagram-ABIIQ3AL-BzeoX11K.js → quadrantDiagram-ABIIQ3AL-DLSgxv-x.js} +1 -1
  49. package/static/assets/{railroadDiagram-RFXS5EU6-DPa8V-DS.js → railroadDiagram-RFXS5EU6-b1SreCxV.js} +1 -1
  50. package/static/assets/{requirementDiagram-TGXJPOKE-Bvv4E9CW.js → requirementDiagram-TGXJPOKE-BV4CNLIo.js} +1 -1
  51. package/static/assets/{sankeyDiagram-HTMAVEWB-0MJhpRfa.js → sankeyDiagram-HTMAVEWB-BiFv1ux8.js} +1 -1
  52. package/static/assets/{sequenceDiagram-DBY2YBRQ-DigLSZlS.js → sequenceDiagram-DBY2YBRQ-Dx4t2iJL.js} +1 -1
  53. package/static/assets/{sizeCapture-X5ZJPWSS-6mCHKLvi.js → sizeCapture-X5ZJPWSS-CnQy7abz.js} +1 -1
  54. package/static/assets/{stateDiagram-2N3HPSRC-BaIapwPh.js → stateDiagram-2N3HPSRC-Dydsj0oL.js} +1 -1
  55. package/static/assets/stateDiagram-v2-6OUMAXLB-C8SPn3Oh.js +1 -0
  56. package/static/assets/{swimlanes-5IMT3BWC-Doushgb5.js → swimlanes-5IMT3BWC-CxCwYCDy.js} +2 -2
  57. package/static/assets/swimlanesDiagram-G3AALYLV-74ote7Bb.js +8 -0
  58. package/static/assets/{timeline-definition-FHXFAJF6-DQXoUYQ4.js → timeline-definition-FHXFAJF6-C_Fi6bNQ.js} +1 -1
  59. package/static/assets/{vennDiagram-L72KCM5P-DqoXPumC.js → vennDiagram-L72KCM5P-CgwC5qPZ.js} +1 -1
  60. package/static/assets/{wardleyDiagram-EHGQE667-CjaK_50N.js → wardleyDiagram-EHGQE667-s9kPgnSC.js} +1 -1
  61. package/static/assets/{xychartDiagram-FW5EYKEG-DUrmfVTr.js → xychartDiagram-FW5EYKEG-DBDMMVMd.js} +1 -1
  62. package/static/index.html +2 -2
  63. package/static/assets/channel-D07NVaUc.js +0 -1
  64. package/static/assets/classDiagram-OUVF2IWQ-CVG8E0VE.js +0 -1
  65. package/static/assets/classDiagram-v2-EOCWNBFH-CVG8E0VE.js +0 -1
  66. package/static/assets/stateDiagram-v2-6OUMAXLB-DZNVilCm.js +0 -1
  67. package/static/assets/swimlanesDiagram-G3AALYLV-Dye5Ycrr.js +0 -8
Binary file
Binary file
Binary file
package/dist/index.js CHANGED
@@ -6809,8 +6809,8 @@ var {
6809
6809
  // package.json
6810
6810
  var package_default = {
6811
6811
  name: "@rashidee/co2",
6812
- version: "1.3.24",
6813
- description: "Compound Context Studio \u2014 self-hosted team context authoring for CO2 projects",
6812
+ version: "1.3.27",
6813
+ description: "Compound Context Studio \xC3\xA2\xE2\u201A\xAC\xE2\u20AC\x9D self-hosted team context authoring for CO2 projects",
6814
6814
  type: "module",
6815
6815
  license: "MIT",
6816
6816
  publishConfig: {
@@ -19569,6 +19569,10 @@ var dashboardProjectSchema = external_exports.object({
19569
19569
  // ../core/src/schemas/defect.ts
19570
19570
  var bugStatusSchema = external_exports.enum(["open", "in_fix", "fixed", "verified", "closed"]);
19571
19571
  var EDITABLE_BUG_STATUSES = ["open", "in_fix"];
19572
+ var REOPENABLE_BUG_STATUSES = ["open", "in_fix", "fixed"];
19573
+ var reopenBugsSchema = external_exports.object({
19574
+ bugIds: external_exports.array(external_exports.number().int().positive()).min(1)
19575
+ });
19572
19576
  var createBugReportSchema = external_exports.object({
19573
19577
  projectId: external_exports.number().int().positive(),
19574
19578
  applicationId: external_exports.number().int().positive(),
@@ -19585,6 +19589,10 @@ var createBugReportSchema = external_exports.object({
19585
19589
  var updateBugStatusSchema = external_exports.object({
19586
19590
  status: bugStatusSchema
19587
19591
  });
19592
+ var moveBugReportSchema = external_exports.object({
19593
+ applicationId: external_exports.number().int().positive(),
19594
+ module: external_exports.string().max(120).optional()
19595
+ });
19588
19596
  var updateBugReportSchema = external_exports.object({
19589
19597
  title: external_exports.string().min(1).max(200),
19590
19598
  description: external_exports.string().optional(),
@@ -24576,6 +24584,72 @@ function updateBugStatus(db, workspacePath, bugId, status) {
24576
24584
  db.update(bugReports).set({ status, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }).where(eq(bugReports.id, bugId)).run();
24577
24585
  syncBugMdToDisk(db, workspacePath, existing.applicationId, bugId);
24578
24586
  }
24587
+ function moveBugReport(db, workspacePath, bugId, input) {
24588
+ const existing = db.select().from(bugReports).where(and(eq(bugReports.id, bugId), eq(bugReports.isDeleted, 0))).get();
24589
+ if (!existing) throw svcError11("BUG_NOT_FOUND", 404);
24590
+ if (!EDITABLE_BUG_STATUSES.includes(existing.status)) throw svcError11("BUG_NOT_MOVABLE", 409);
24591
+ const target = db.select({ id: applications.id, projectId: applications.projectId }).from(applications).where(eq(applications.id, input.applicationId)).get();
24592
+ if (!target || target.projectId !== existing.projectId) {
24593
+ throw svcError11("APPLICATION_NOT_FOUND", 404);
24594
+ }
24595
+ const targetModule = input.module?.trim() || null;
24596
+ const sameModule = (existing.module?.toLowerCase() ?? null) === (targetModule?.toLowerCase() ?? null);
24597
+ if (existing.applicationId === input.applicationId && sameModule) {
24598
+ throw svcError11("MOVE_NO_CHANGE", 400);
24599
+ }
24600
+ db.update(bugReports).set({
24601
+ applicationId: input.applicationId,
24602
+ module: targetModule,
24603
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString()
24604
+ }).where(eq(bugReports.id, bugId)).run();
24605
+ removeBugBulletFromDisk(db, workspacePath, existing.applicationId, existing);
24606
+ syncBugMdToDisk(db, workspacePath, input.applicationId, bugId, "insert");
24607
+ return getBugReport(db, bugId);
24608
+ }
24609
+ function removeBugBulletFromDisk(db, workspacePath, applicationId, bug) {
24610
+ try {
24611
+ const app = db.select({ id: applications.id, name: applications.name, projectId: applications.projectId }).from(applications).where(eq(applications.id, applicationId)).get();
24612
+ if (!app) return;
24613
+ const project = db.select({ workspaceFolderName: projects.workspaceFolderName }).from(projects).where(eq(projects.id, app.projectId)).get();
24614
+ if (!project) return;
24615
+ const projectDir2 = join21(workspacePath, project.workspaceFolderName);
24616
+ const file = join21(projectDir2, resolveAppFolderName(projectDir2, app.name), "context", "BUG.md");
24617
+ if (!existsSync19(file)) return;
24618
+ const removed = removeBugFromBugMd(readFileSync13(file, "utf8"), bugCodeAndTitle(bug).code);
24619
+ if (removed !== null) writeFileSync11(file, removed, "utf8");
24620
+ else writeBugMdFile(db, workspacePath, app, project.workspaceFolderName);
24621
+ } catch {
24622
+ }
24623
+ }
24624
+ function reopenBugReports(db, workspacePath, bugIds, userId) {
24625
+ if (bugIds.length === 0) throw svcError11("NO_BUGS_SELECTED", 400);
24626
+ const ids = [...new Set(bugIds)];
24627
+ const rows = db.select().from(bugReports).where(and(inArray(bugReports.id, ids), eq(bugReports.isDeleted, 0))).all();
24628
+ const first = rows[0];
24629
+ if (rows.length !== ids.length || !first) throw svcError11("BUG_NOT_FOUND", 404);
24630
+ const projectId = first.projectId;
24631
+ if (rows.some((r) => r.projectId !== projectId)) throw svcError11("REOPEN_CROSS_PROJECT", 400);
24632
+ const currentVersionId = ensureBaselineVersion(db, projectId, userId);
24633
+ for (const r of rows) {
24634
+ if (r.prdVersionId === currentVersionId || !REOPENABLE_BUG_STATUSES.includes(r.status)) {
24635
+ throw svcError11("BUG_NOT_REOPENABLE", 400);
24636
+ }
24637
+ }
24638
+ const now = (/* @__PURE__ */ new Date()).toISOString();
24639
+ db.transaction((tx) => {
24640
+ for (const r of rows) {
24641
+ tx.update(bugReports).set({ prdVersionId: currentVersionId, status: "open", updatedAt: now }).where(eq(bugReports.id, r.id)).run();
24642
+ }
24643
+ });
24644
+ for (const applicationId of [...new Set(rows.map((r) => r.applicationId))]) {
24645
+ try {
24646
+ generateBugMd(db, workspacePath, projectId, applicationId, userId);
24647
+ } catch {
24648
+ }
24649
+ }
24650
+ const updated = db.select({ bug: bugReports, reporterName: users.displayName }).from(bugReports).leftJoin(users, eq(users.id, bugReports.reportedBy)).where(inArray(bugReports.id, ids)).all();
24651
+ return updated.map((u) => toDto6(u.bug, u.reporterName));
24652
+ }
24579
24653
  function bugCodeAndTitle(bug) {
24580
24654
  const embedded = bug.title.match(/^\[(BUG-\d+)\]\s*(.*)$/);
24581
24655
  if (embedded) return { code: embedded[1], title: (embedded[2] ?? "").trim() };
@@ -24644,6 +24718,37 @@ var MD_HR = /^-{3,}\s*$/;
24644
24718
  var MD_BULLET = /^-\s+(?:~~)?\s*\[BUG-\d+\]/;
24645
24719
  var MD_LEGACY_HEADING = /^##\s+(?:~~)?\s*\[BUG-\d+\]/;
24646
24720
  var isStructural = (line) => MD_HEADING.test(line) || MD_VERSION.test(line) || MD_HR.test(line) || MD_BULLET.test(line);
24721
+ function bulletExtent(lines, code) {
24722
+ const codeRe = new RegExp(`^-\\s+(?:~~)?\\s*\\[${code}\\]`);
24723
+ const start = lines.findIndex((l) => codeRe.test(l));
24724
+ if (start === -1) return null;
24725
+ let end = start + 1;
24726
+ while (end < lines.length) {
24727
+ const line = lines[end];
24728
+ if (line.trim() === "") {
24729
+ let peek = end + 1;
24730
+ while (peek < lines.length && lines[peek].trim() === "") peek++;
24731
+ if (peek < lines.length && !isStructural(lines[peek])) {
24732
+ end = peek + 1;
24733
+ continue;
24734
+ }
24735
+ break;
24736
+ }
24737
+ if (isStructural(line)) break;
24738
+ end++;
24739
+ }
24740
+ return { start, end };
24741
+ }
24742
+ function removeBugFromBugMd(content, code) {
24743
+ const bom = content.startsWith("\uFEFF") ? "\uFEFF" : "";
24744
+ const eol = content.includes("\r\n") ? "\r\n" : "\n";
24745
+ const lines = (bom ? content.slice(1) : content).split(/\r?\n/);
24746
+ if (lines.some((l) => MD_LEGACY_HEADING.test(l))) return null;
24747
+ const extent = bulletExtent(lines, code);
24748
+ if (!extent) return content;
24749
+ lines.splice(extent.start, extent.end - extent.start);
24750
+ return bom + lines.join(eol);
24751
+ }
24647
24752
  function mergeBugIntoBugMd(content, bug, semver, moduleCategory, mode) {
24648
24753
  const bom = content.startsWith("\uFEFF") ? "\uFEFF" : "";
24649
24754
  const eol = content.includes("\r\n") ? "\r\n" : "\n";
@@ -24652,25 +24757,9 @@ function mergeBugIntoBugMd(content, bug, semver, moduleCategory, mode) {
24652
24757
  const bullet = bugBulletLines(bug);
24653
24758
  const { code } = bugCodeAndTitle(bug);
24654
24759
  if (mode === "replace") {
24655
- const codeRe = new RegExp(`^-\\s+(?:~~)?\\s*\\[${code}\\]`);
24656
- const start = lines.findIndex((l) => codeRe.test(l));
24657
- if (start !== -1) {
24658
- let end = start + 1;
24659
- while (end < lines.length) {
24660
- const line = lines[end];
24661
- if (line.trim() === "") {
24662
- let peek = end + 1;
24663
- while (peek < lines.length && lines[peek].trim() === "") peek++;
24664
- if (peek < lines.length && !isStructural(lines[peek])) {
24665
- end = peek + 1;
24666
- continue;
24667
- }
24668
- break;
24669
- }
24670
- if (isStructural(line)) break;
24671
- end++;
24672
- }
24673
- lines.splice(start, end - start, ...bullet);
24760
+ const extent = bulletExtent(lines, code);
24761
+ if (extent) {
24762
+ lines.splice(extent.start, extent.end - extent.start, ...bullet);
24674
24763
  return bom + lines.join(eol);
24675
24764
  }
24676
24765
  }
@@ -24901,6 +24990,33 @@ function defectRoutes(db, workspacePath) {
24901
24990
  return errorResponse5(c, e);
24902
24991
  }
24903
24992
  });
24993
+ const validateMove = zValidator("json", moveBugReportSchema, (result, c) => {
24994
+ if (!result.success) {
24995
+ return c.json({ code: "VALIDATION_FAILED", issues: result.error.issues }, 422);
24996
+ }
24997
+ });
24998
+ app.post("/:id{[0-9]+}/move", validateMove, (c) => {
24999
+ const id = Number(c.req.param("id"));
25000
+ try {
25001
+ return c.json({ moved: moveBugReport(db, workspacePath, id, c.req.valid("json")) });
25002
+ } catch (e) {
25003
+ return errorResponse5(c, e);
25004
+ }
25005
+ });
25006
+ const validateReopen = zValidator("json", reopenBugsSchema, (result, c) => {
25007
+ if (!result.success) {
25008
+ return c.json({ code: "VALIDATION_FAILED", issues: result.error.issues }, 422);
25009
+ }
25010
+ });
25011
+ app.post("/reopen", validateReopen, (c) => {
25012
+ const user = c.get("user");
25013
+ try {
25014
+ const moved = reopenBugReports(db, workspacePath, c.req.valid("json").bugIds, user.id);
25015
+ return c.json({ moved });
25016
+ } catch (e) {
25017
+ return errorResponse5(c, e);
25018
+ }
25019
+ });
24904
25020
  app.get("/projects/:projectId/can-report", (c) => {
24905
25021
  const projectId = Number(c.req.param("projectId"));
24906
25022
  if (Number.isNaN(projectId)) return c.json({ code: "INVALID_ID" }, 400);
@@ -26696,14 +26812,7 @@ function getRunApplicationChangelog(db, workspacePath, workflowMarkdownId, appNa
26696
26812
  if (!wfm) throw svcError14("RUN_NOT_FOUND", 404);
26697
26813
  const project = db.select().from(projects).where(eq(projects.id, wfm.projectId)).get();
26698
26814
  if (!project) throw svcError14("PROJECT_NOT_FOUND", 404);
26699
- let runAppNames;
26700
- if (wfm.importedAppName) {
26701
- runAppNames = [wfm.importedAppName];
26702
- } else {
26703
- const appIds = db.select({ applicationId: conductorRuns.applicationId }).from(conductorRuns).where(eq(conductorRuns.workflowMarkdownId, wfm.id)).all().map((r) => r.applicationId);
26704
- runAppNames = appIds.length > 0 ? db.select({ name: applications.name }).from(applications).where(inArray(applications.id, appIds)).all().map((a) => a.name) : [];
26705
- }
26706
- if (!runAppNames.includes(appName)) throw svcError14("APP_NOT_IN_RUN", 404);
26815
+ if (!runApplicationNames(db, wfm).includes(appName)) throw svcError14("APP_NOT_IN_RUN", 404);
26707
26816
  const projectDir2 = resolve2(workspacePath, project.workspaceFolderName);
26708
26817
  const appFolder = resolveAppFolderName(projectDir2, appName);
26709
26818
  const absolute = resolve2(projectDir2, appFolder, "CHANGELOG.md");
@@ -26716,6 +26825,30 @@ function getRunApplicationChangelog(db, workspacePath, workflowMarkdownId, appNa
26716
26825
  content: readFileSync17(absolute, "utf-8")
26717
26826
  };
26718
26827
  }
26828
+ function runApplicationNames(db, wfm) {
26829
+ if (wfm.importedAppName) return [wfm.importedAppName];
26830
+ const appIds = db.select({ applicationId: conductorRuns.applicationId }).from(conductorRuns).where(eq(conductorRuns.workflowMarkdownId, wfm.id)).all().map((r) => r.applicationId);
26831
+ if (appIds.length === 0) return [];
26832
+ return db.select({ name: applications.name }).from(applications).where(inArray(applications.id, appIds)).all().map((a) => a.name);
26833
+ }
26834
+ function getRunApplicationTracker(db, workspacePath, workflowMarkdownId, appName) {
26835
+ const wfm = db.select().from(workflowMarkdowns).where(eq(workflowMarkdowns.id, workflowMarkdownId)).get();
26836
+ if (!wfm) throw svcError14("RUN_NOT_FOUND", 404);
26837
+ if (wfm.conductorType === "prepare") throw svcError14("NO_TRACKER_FOR_CONDUCTOR", 400);
26838
+ const project = db.select().from(projects).where(eq(projects.id, wfm.projectId)).get();
26839
+ if (!project) throw svcError14("PROJECT_NOT_FOUND", 404);
26840
+ if (!runApplicationNames(db, wfm).includes(appName)) throw svcError14("APP_NOT_IN_RUN", 404);
26841
+ const projectDir2 = resolve2(workspacePath, project.workspaceFolderName);
26842
+ const absolute = resolve2(resolveRunTrackingFilePath(projectDir2, appName, wfm.conductorType));
26843
+ if (absolute !== projectDir2 && !absolute.startsWith(projectDir2 + sep2))
26844
+ throw svcError14("INVALID_PATH", 400);
26845
+ if (!existsSync23(absolute)) throw svcError14("TRACKER_NOT_FOUND", 404);
26846
+ return {
26847
+ applicationName: appName,
26848
+ filePath: relative(workspacePath, absolute).replace(/\\/g, "/"),
26849
+ content: readFileSync17(absolute, "utf-8")
26850
+ };
26851
+ }
26719
26852
  function toDetail(db, projectFolder, wfm, workspacePath) {
26720
26853
  if (wfm.importedAppName) {
26721
26854
  return {
@@ -27958,6 +28091,17 @@ function workflowRoutes(db, workspacePath) {
27958
28091
  return errorResponse16(c, e);
27959
28092
  }
27960
28093
  });
28094
+ app.get("/runs/:id/tracker", (c) => {
28095
+ const id = Number(c.req.param("id"));
28096
+ if (Number.isNaN(id)) return c.json({ code: "INVALID_ID" }, 400);
28097
+ const appName = c.req.query("app");
28098
+ if (!appName) return c.json({ code: "APP_REQUIRED" }, 400);
28099
+ try {
28100
+ return c.json(getRunApplicationTracker(db, workspacePath, id, appName));
28101
+ } catch (e) {
28102
+ return errorResponse16(c, e);
28103
+ }
28104
+ });
27961
28105
  app.post("/runs/:id/force-stop", (c) => {
27962
28106
  const id = Number(c.req.param("id"));
27963
28107
  if (Number.isNaN(id)) return c.json({ code: "INVALID_ID" }, 400);
package/package.json CHANGED
@@ -1,41 +1,41 @@
1
- {
2
- "name": "@rashidee/co2",
3
- "version": "1.3.24",
4
- "description": "Compound Context Studio self-hosted team context authoring for CO2 projects",
5
- "type": "module",
6
- "license": "MIT",
7
- "publishConfig": {
8
- "access": "public"
9
- },
10
- "engines": {
11
- "node": ">=22"
12
- },
13
- "bin": {
14
- "co2": "dist/index.js"
15
- },
16
- "files": [
17
- "dist",
18
- "static",
19
- "drizzle",
20
- "plugin"
21
- ],
22
- "scripts": {
23
- "build": "tsup && node ../../scripts/copy-migrations.mjs && node ../../scripts/copy-web.mjs && node ../../scripts/copy-plugin.mjs"
24
- },
25
- "dependencies": {
26
- "better-sqlite3": "^12.2.0",
27
- "node-pty": "^1.0.0"
28
- },
29
- "devDependencies": {
30
- "@co2-cli/core": "workspace:*",
31
- "@co2-cli/server": "workspace:*",
32
- "@hono/node-server": "^1.13.0",
33
- "@hono/zod-validator": "^0.4.1",
34
- "commander": "^12.1.0",
35
- "drizzle-orm": "^0.36.0",
36
- "hono": "^4.6.0",
37
- "picocolors": "^1.1.0",
38
- "tsup": "^8.3.0",
39
- "zod": "^3.23.8"
40
- }
41
- }
1
+ {
2
+ "name": "@rashidee/co2",
3
+ "version": "1.3.27",
4
+ "description": "Compound Context Studio — self-hosted team context authoring for CO2 projects",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "engines": {
11
+ "node": ">=22"
12
+ },
13
+ "bin": {
14
+ "co2": "dist/index.js"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "static",
19
+ "drizzle",
20
+ "plugin"
21
+ ],
22
+ "scripts": {
23
+ "build": "tsup && node ../../scripts/copy-migrations.mjs && node ../../scripts/copy-web.mjs && node ../../scripts/copy-plugin.mjs"
24
+ },
25
+ "dependencies": {
26
+ "better-sqlite3": "^12.2.0",
27
+ "node-pty": "^1.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "@co2-cli/core": "workspace:*",
31
+ "@co2-cli/server": "workspace:*",
32
+ "@hono/node-server": "^1.13.0",
33
+ "@hono/zod-validator": "^0.4.1",
34
+ "commander": "^12.1.0",
35
+ "drizzle-orm": "^0.36.0",
36
+ "hono": "^4.6.0",
37
+ "picocolors": "^1.1.0",
38
+ "tsup": "^8.3.0",
39
+ "zod": "^3.23.8"
40
+ }
41
+ }
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-ctV9LaAX.js";import{p as f}from"./chunk-JWPE2WC7-277KBuwS.js";import{_ as n,l as o}from"./index-DHqZVy2E.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-B6Oy4mbg.js";var v=d().RailroadAbnf.parser.LangiumParser,l=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),i=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:i,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return l(e.element);case"AbnfOptionalGroup":return{type:"optional",element:l(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:l(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},w={parser:R,db:a,renderer:u,styles:p};export{w as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-DMVlpoSf.js";import{p as f}from"./chunk-JWPE2WC7-D9BTDnXt.js";import{_ as n,l as o}from"./index-C26387Mq.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DNym54iM.js";var v=d().RailroadAbnf.parser.LangiumParser,l=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),i=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:i,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return l(e.element);case"AbnfOptionalGroup":return{type:"optional",element:l(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:l(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},w={parser:R,db:a,renderer:u,styles:p};export{w as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as y,a1 as tn,a2 as F,a3 as q,a4 as _,a5 as un,a6 as rn,a7 as J,a8 as o,a9 as j,aa as sn,ab as on,ac as fn}from"./index-DHqZVy2E.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(fn(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,B=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<rn)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(on((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as y,a1 as tn,a2 as F,a3 as q,a4 as _,a5 as un,a6 as rn,a7 as J,a8 as o,a9 as j,aa as sn,ab as on,ac as fn}from"./index-C26387Mq.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(fn(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-an,c=A.apply(this,arguments)-an,B=un(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(un(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<rn)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(on((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-rn/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};