@rashidee/co2 1.3.27 → 1.3.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.co2-dat/app.db +0 -0
- package/dist/.co2-dat/app.db-shm +0 -0
- package/dist/.co2-dat/app.db-wal +0 -0
- package/dist/index.js +80 -9
- package/package.json +2 -2
- package/plugin/.claude-plugin/plugin.json +22 -22
- package/plugin/skills/conductor-defect/SKILL.md +924 -905
- package/static/assets/{abnfDiagram-VRR7QNED-BqqVu83_.js → abnfDiagram-VRR7QNED-B1zOhOO1.js} +1 -1
- package/static/assets/{arc-D9zT1NvB.js → arc-B8GD8vjH.js} +1 -1
- package/static/assets/{architectureDiagram-ZJ3FMSHR-D-34OZne.js → architectureDiagram-ZJ3FMSHR-Dg86MCTB.js} +1 -1
- package/static/assets/{blockDiagram-677ZJIJ3-DzXrZXuu.js → blockDiagram-677ZJIJ3-CK3Tug1R.js} +1 -1
- package/static/assets/{c4Diagram-LMCZKHZV-CZWILWBU.js → c4Diagram-LMCZKHZV-qM1w9tnY.js} +1 -1
- package/static/assets/channel-Dnlq5moS.js +1 -0
- package/static/assets/{chunk-2Q5K7J3B-BnyVGcHp.js → chunk-2Q5K7J3B-isC3spex.js} +1 -1
- package/static/assets/{chunk-32BRIVSS-D6kWVoTq.js → chunk-32BRIVSS-BlKMW18Z.js} +1 -1
- package/static/assets/{chunk-5VM5RSS4-BDuQxGsi.js → chunk-5VM5RSS4-Dvcwsclh.js} +1 -1
- package/static/assets/{chunk-EX3LRPZG-CzemsC9C.js → chunk-EX3LRPZG-CxyFSCcZ.js} +1 -1
- package/static/assets/{chunk-JWPE2WC7-D9BTDnXt.js → chunk-JWPE2WC7-C1Gudu3M.js} +1 -1
- package/static/assets/{chunk-MOJQB5TN-DMVlpoSf.js → chunk-MOJQB5TN-CpZ6vY3L.js} +1 -1
- package/static/assets/{chunk-RYQCIY6F-Cr59tI34.js → chunk-RYQCIY6F-Bi7Lt98n.js} +1 -1
- package/static/assets/{chunk-V7JOEXUC-CItFH4TC.js → chunk-V7JOEXUC-ypRmRGpD.js} +1 -1
- package/static/assets/{chunk-VR4S4FIN-D-5bD2Rp.js → chunk-VR4S4FIN-CUmgHQ4J.js} +1 -1
- package/static/assets/{chunk-XXDRQBXY-BYTedp-b.js → chunk-XXDRQBXY-YKI0BxVa.js} +1 -1
- package/static/assets/classDiagram-OUVF2IWQ-CKr0oG9V.js +1 -0
- package/static/assets/classDiagram-v2-EOCWNBFH-CKr0oG9V.js +1 -0
- package/static/assets/{cose-bilkent-JH36ORCC-ph9z6Rag.js → cose-bilkent-JH36ORCC-Bvy5w26V.js} +1 -1
- package/static/assets/{cynefin-VYW2F7L2-DNym54iM.js → cynefin-VYW2F7L2-DmQsQ2TU.js} +1 -1
- package/static/assets/{cynefinDiagram-TSTJHNR4-BFhXROr4.js → cynefinDiagram-TSTJHNR4-D0-WC7kz.js} +1 -1
- package/static/assets/{dagre-VKFMJZFB-C8Bvbfep.js → dagre-VKFMJZFB-C1BlJBGv.js} +1 -1
- package/static/assets/{diagram-FQU43EPY-dou1k9fZ.js → diagram-FQU43EPY-Cg2hPqzw.js} +1 -1
- package/static/assets/{diagram-G47NLZAW-DTVkGSut.js → diagram-G47NLZAW-BP823BgP.js} +1 -1
- package/static/assets/{diagram-NH7WQ7WH-CLF_alfd.js → diagram-NH7WQ7WH-C_Zqnx2Q.js} +1 -1
- package/static/assets/{diagram-OA4YK3LP-CVQqfvRy.js → diagram-OA4YK3LP-V607Kbpj.js} +1 -1
- package/static/assets/{diagram-WEI45ONY-X6ugzDOD.js → diagram-WEI45ONY-DxUG6r0f.js} +1 -1
- package/static/assets/{ebnfDiagram-CCIWWBDH-PgskU8v_.js → ebnfDiagram-CCIWWBDH-Ba30Z15f.js} +1 -1
- package/static/assets/{erDiagram-Q63AITRT-CBW5aC2C.js → erDiagram-Q63AITRT-D6FLaEED.js} +1 -1
- package/static/assets/{flowDiagram-23GEKE2U-BbyDOz5x.js → flowDiagram-23GEKE2U-C-d7PYEe.js} +1 -1
- package/static/assets/{ganttDiagram-NO4QXBWP-CceMROcR.js → ganttDiagram-NO4QXBWP-Ba6Uwkik.js} +1 -1
- package/static/assets/{gitGraphDiagram-IHSO6WYX-t2R0tkUO.js → gitGraphDiagram-IHSO6WYX-ZAJbW3RO.js} +1 -1
- package/static/assets/{index-BM5AGe_l.css → index-DPxMV4aU.css} +1 -1
- package/static/assets/index-DU7Xwr-g.js +496 -0
- package/static/assets/{infoDiagram-FWYZ7A6U-Du1gMFcI.js → infoDiagram-FWYZ7A6U-BFfhZFvq.js} +1 -1
- package/static/assets/{ishikawaDiagram-FXEZZL3T-VAYbdalo.js → ishikawaDiagram-FXEZZL3T-IIK9GJIX.js} +1 -1
- package/static/assets/{journeyDiagram-5HDEW3XC-DkLYEpM2.js → journeyDiagram-5HDEW3XC-DREaqROi.js} +1 -1
- package/static/assets/{kanban-definition-HUTT4EX6-BCzd09tX.js → kanban-definition-HUTT4EX6-XQ87DJka.js} +1 -1
- package/static/assets/{linear-Dm0uNoIF.js → linear-BRptxfMg.js} +1 -1
- package/static/assets/{mindmap-definition-LN4V7U3C-D69_xTUO.js → mindmap-definition-LN4V7U3C-zx0hP0Si.js} +1 -1
- package/static/assets/{pegDiagram-2B236MQR-D6t8-mr5.js → pegDiagram-2B236MQR-BkKjcF1V.js} +1 -1
- package/static/assets/{pieDiagram-ENE6RG2P-CRhMSL7L.js → pieDiagram-ENE6RG2P-BlrcgJsf.js} +1 -1
- package/static/assets/{quadrantDiagram-ABIIQ3AL-DLSgxv-x.js → quadrantDiagram-ABIIQ3AL-BY6Q-v3j.js} +1 -1
- package/static/assets/{railroadDiagram-RFXS5EU6-b1SreCxV.js → railroadDiagram-RFXS5EU6-Dd0Y_o2f.js} +1 -1
- package/static/assets/{requirementDiagram-TGXJPOKE-BV4CNLIo.js → requirementDiagram-TGXJPOKE-DnkNRD4q.js} +1 -1
- package/static/assets/{sankeyDiagram-HTMAVEWB-BiFv1ux8.js → sankeyDiagram-HTMAVEWB-DIEbMauU.js} +1 -1
- package/static/assets/{sequenceDiagram-DBY2YBRQ-Dx4t2iJL.js → sequenceDiagram-DBY2YBRQ-DrSyx6Hq.js} +1 -1
- package/static/assets/{sizeCapture-X5ZJPWSS-CnQy7abz.js → sizeCapture-X5ZJPWSS-BHRK6fVR.js} +1 -1
- package/static/assets/{stateDiagram-2N3HPSRC-Dydsj0oL.js → stateDiagram-2N3HPSRC-p36VYpET.js} +1 -1
- package/static/assets/stateDiagram-v2-6OUMAXLB-CHODjKhh.js +1 -0
- package/static/assets/{swimlanes-5IMT3BWC-CxCwYCDy.js → swimlanes-5IMT3BWC-B27NzwNn.js} +2 -2
- package/static/assets/swimlanesDiagram-G3AALYLV-DZEtOcuy.js +8 -0
- package/static/assets/{timeline-definition-FHXFAJF6-C_Fi6bNQ.js → timeline-definition-FHXFAJF6-BBkuwSpt.js} +1 -1
- package/static/assets/{vennDiagram-L72KCM5P-CgwC5qPZ.js → vennDiagram-L72KCM5P-BkqY7uCt.js} +1 -1
- package/static/assets/{wardleyDiagram-EHGQE667-s9kPgnSC.js → wardleyDiagram-EHGQE667-BhekO6RT.js} +1 -1
- package/static/assets/{xychartDiagram-FW5EYKEG-DBDMMVMd.js → xychartDiagram-FW5EYKEG-Dsyggs2D.js} +1 -1
- package/static/index.html +2 -2
- package/static/assets/channel-DKYjk4Z0.js +0 -1
- package/static/assets/classDiagram-OUVF2IWQ-BypGwdom.js +0 -1
- package/static/assets/classDiagram-v2-EOCWNBFH-BypGwdom.js +0 -1
- package/static/assets/index-C26387Mq.js +0 -496
- package/static/assets/stateDiagram-v2-6OUMAXLB-C8SPn3Oh.js +0 -1
- package/static/assets/swimlanesDiagram-G3AALYLV-74ote7Bb.js +0 -8
package/dist/.co2-dat/app.db
CHANGED
|
Binary file
|
package/dist/.co2-dat/app.db-shm
CHANGED
|
Binary file
|
package/dist/.co2-dat/app.db-wal
CHANGED
|
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.
|
|
6813
|
-
description: "Compound Context Studio \xC3\xA2\xE2\
|
|
6812
|
+
version: "1.3.28",
|
|
6813
|
+
description: "Compound Context Studio \xC3\u0192\xC2\xA2\xC3\xA2\xE2\u20AC\u0161\xC2\xAC\xC3\xA2\xE2\u201A\xAC\xC2\x9D self-hosted team context authoring for CO2 projects",
|
|
6814
6814
|
type: "module",
|
|
6815
6815
|
license: "MIT",
|
|
6816
6816
|
publishConfig: {
|
|
@@ -12320,8 +12320,10 @@ var bugReports = sqliteTable("bug_reports", {
|
|
|
12320
12320
|
title: text("title").notNull(),
|
|
12321
12321
|
description: text("description"),
|
|
12322
12322
|
// [v1.5.1] severity dropped — the CO2 BUG.md standard carries no severity level.
|
|
12323
|
+
// 'rejected' — withdrawn report, superseded by a new one (type-level only; the column has
|
|
12324
|
+
// no CHECK constraint, so no migration is needed).
|
|
12323
12325
|
status: text("status", {
|
|
12324
|
-
enum: ["open", "in_fix", "fixed", "verified", "closed"]
|
|
12326
|
+
enum: ["open", "in_fix", "fixed", "verified", "closed", "rejected"]
|
|
12325
12327
|
}).notNull().default("open"),
|
|
12326
12328
|
// [v1.8.0] CO2 BUG.md is grouped by module — the module name verbatim from the CLAUDE.md
|
|
12327
12329
|
// registry / imported BUG.md section (migration 0014 ALTER ADD). NULL → `# Common Module`.
|
|
@@ -19567,7 +19569,7 @@ var dashboardProjectSchema = external_exports.object({
|
|
|
19567
19569
|
});
|
|
19568
19570
|
|
|
19569
19571
|
// ../core/src/schemas/defect.ts
|
|
19570
|
-
var bugStatusSchema = external_exports.enum(["open", "in_fix", "fixed", "verified", "closed"]);
|
|
19572
|
+
var bugStatusSchema = external_exports.enum(["open", "in_fix", "fixed", "verified", "closed", "rejected"]);
|
|
19571
19573
|
var EDITABLE_BUG_STATUSES = ["open", "in_fix"];
|
|
19572
19574
|
var REOPENABLE_BUG_STATUSES = ["open", "in_fix", "fixed"];
|
|
19573
19575
|
var reopenBugsSchema = external_exports.object({
|
|
@@ -20975,6 +20977,18 @@ function getFacet(db, moduleId, prdVersionId, facet) {
|
|
|
20975
20977
|
).limit(1).get();
|
|
20976
20978
|
return row ? stripVersionTags(row.content) : "";
|
|
20977
20979
|
}
|
|
20980
|
+
function getFacetHistory(db, projectId, moduleId, facet) {
|
|
20981
|
+
const mod = db.select({ projectId: applications.projectId }).from(projectModules).innerJoin(applications, eq(applications.id, projectModules.applicationId)).where(eq(projectModules.id, moduleId)).limit(1).get();
|
|
20982
|
+
if (!mod || mod.projectId !== projectId) throw svcError3("MODULE_NOT_FOUND", 404);
|
|
20983
|
+
const versions = db.select({ id: prdVersions.id, semver: prdVersions.semver, isCurrent: prdVersions.isCurrent }).from(prdVersions).where(eq(prdVersions.projectId, projectId)).all();
|
|
20984
|
+
const rows = db.select({ prdVersionId: prdRequirements.prdVersionId, content: prdRequirements.content }).from(prdRequirements).where(and(eq(prdRequirements.moduleId, moduleId), eq(prdRequirements.facet, facet))).all();
|
|
20985
|
+
const contentByVersion = new Map(rows.map((r) => [r.prdVersionId, r.content]));
|
|
20986
|
+
return versions.filter((v) => !v.isCurrent).map((v) => ({
|
|
20987
|
+
versionId: v.id,
|
|
20988
|
+
semver: v.semver,
|
|
20989
|
+
content: stripVersionTags(contentByVersion.get(v.id) ?? "")
|
|
20990
|
+
})).filter((entry) => entry.content !== "").sort((a, b) => compareSemver(b.semver, a.semver));
|
|
20991
|
+
}
|
|
20978
20992
|
function getSection(db, applicationId, sectionType) {
|
|
20979
20993
|
const row = db.select({ content: prdSections.content }).from(prdSections).where(
|
|
20980
20994
|
and(eq(prdSections.applicationId, applicationId), eq(prdSections.sectionType, sectionType))
|
|
@@ -24170,6 +24184,19 @@ function contextRoutes(db, workspacePath) {
|
|
|
24170
24184
|
}
|
|
24171
24185
|
return c.json({ content });
|
|
24172
24186
|
});
|
|
24187
|
+
app.get("/:projectId/modules/:moduleId/facets/:facet/history", (c) => {
|
|
24188
|
+
const projectId = Number(c.req.param("projectId"));
|
|
24189
|
+
const moduleId = Number(c.req.param("moduleId"));
|
|
24190
|
+
const facetParse = facetSchema.safeParse(c.req.param("facet"));
|
|
24191
|
+
if (Number.isNaN(projectId) || Number.isNaN(moduleId) || !facetParse.success) {
|
|
24192
|
+
return c.json({ code: "INVALID_ID" }, 400);
|
|
24193
|
+
}
|
|
24194
|
+
try {
|
|
24195
|
+
return c.json({ entries: getFacetHistory(db, projectId, moduleId, facetParse.data) });
|
|
24196
|
+
} catch (e) {
|
|
24197
|
+
return errorResponse4(c, e);
|
|
24198
|
+
}
|
|
24199
|
+
});
|
|
24173
24200
|
app.patch(
|
|
24174
24201
|
"/:projectId/modules/:moduleId/facets/:facet",
|
|
24175
24202
|
zValidator("json", upsertFacetSchema),
|
|
@@ -24579,10 +24606,18 @@ function updateBugReport(db, workspacePath, bugId, input) {
|
|
|
24579
24606
|
syncBugMdToDisk(db, workspacePath, existing.applicationId, bugId);
|
|
24580
24607
|
}
|
|
24581
24608
|
function updateBugStatus(db, workspacePath, bugId, status) {
|
|
24582
|
-
const existing = db.select({
|
|
24609
|
+
const existing = db.select({
|
|
24610
|
+
id: bugReports.id,
|
|
24611
|
+
title: bugReports.title,
|
|
24612
|
+
applicationId: bugReports.applicationId
|
|
24613
|
+
}).from(bugReports).where(and(eq(bugReports.id, bugId), eq(bugReports.isDeleted, 0))).get();
|
|
24583
24614
|
if (!existing) throw svcError11("BUG_NOT_FOUND", 404);
|
|
24584
24615
|
db.update(bugReports).set({ status, updatedAt: (/* @__PURE__ */ new Date()).toISOString() }).where(eq(bugReports.id, bugId)).run();
|
|
24585
|
-
|
|
24616
|
+
if (status === "rejected") {
|
|
24617
|
+
removeBugBulletFromDisk(db, workspacePath, existing.applicationId, existing);
|
|
24618
|
+
} else {
|
|
24619
|
+
syncBugMdToDisk(db, workspacePath, existing.applicationId, bugId);
|
|
24620
|
+
}
|
|
24586
24621
|
}
|
|
24587
24622
|
function moveBugReport(db, workspacePath, bugId, input) {
|
|
24588
24623
|
const existing = db.select().from(bugReports).where(and(eq(bugReports.id, bugId), eq(bugReports.isDeleted, 0))).get();
|
|
@@ -24838,7 +24873,13 @@ function mergeBugIntoBugMd(content, bug, semver, moduleCategory, mode) {
|
|
|
24838
24873
|
return bom + lines.join(eol);
|
|
24839
24874
|
}
|
|
24840
24875
|
function writeBugMdFile(db, workspacePath, app, projectFolderName) {
|
|
24841
|
-
const bugs = db.select().from(bugReports).where(
|
|
24876
|
+
const bugs = db.select().from(bugReports).where(
|
|
24877
|
+
and(
|
|
24878
|
+
eq(bugReports.applicationId, app.id),
|
|
24879
|
+
eq(bugReports.isDeleted, 0),
|
|
24880
|
+
ne(bugReports.status, "rejected")
|
|
24881
|
+
)
|
|
24882
|
+
).all();
|
|
24842
24883
|
const modules = db.select({ name: projectModules.name, category: projectModules.category }).from(projectModules).where(and(eq(projectModules.applicationId, app.id), eq(projectModules.isDeleted, 0))).orderBy(projectModules.displayOrder, projectModules.id).all();
|
|
24843
24884
|
const semverByVersionId = new Map(
|
|
24844
24885
|
db.select({ id: prdVersions.id, semver: prdVersions.semver }).from(prdVersions).where(eq(prdVersions.projectId, app.projectId)).all().map((v) => [v.id, v.semver])
|
|
@@ -24864,7 +24905,8 @@ function syncBugStatusesFromMaster(db, trackingFilePath, applicationId) {
|
|
|
24864
24905
|
let updated = 0;
|
|
24865
24906
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
24866
24907
|
for (const row of rows) {
|
|
24867
|
-
if (row.status === "verified" || row.status === "closed")
|
|
24908
|
+
if (row.status === "verified" || row.status === "closed" || row.status === "rejected")
|
|
24909
|
+
continue;
|
|
24868
24910
|
const entry = entries.get(bugCodeAndTitle(row).code);
|
|
24869
24911
|
if (!entry) continue;
|
|
24870
24912
|
const next = mapBugStatus(entry.status);
|
|
@@ -26683,6 +26725,32 @@ function rescanProjectWorkflows(db, workspacePath, projectId, user, watcherInter
|
|
|
26683
26725
|
const currentVersionId = ensureBaselineVersion(db, projectId, user.id);
|
|
26684
26726
|
const semver = db.select({ semver: prdVersions.semver }).from(prdVersions).where(eq(prdVersions.id, currentVersionId)).get()?.semver ?? null;
|
|
26685
26727
|
const affectedForCurrentVersion = getVersionAffectedAppIds(db, projectId, currentVersionId);
|
|
26728
|
+
const bugAppsForCurrentVersion = getAppsWithBugsInVersion(db, projectId, currentVersionId);
|
|
26729
|
+
let prunedRuns = 0;
|
|
26730
|
+
const bugAppsByVersion = /* @__PURE__ */ new Map([
|
|
26731
|
+
[currentVersionId, bugAppsForCurrentVersion]
|
|
26732
|
+
]);
|
|
26733
|
+
const discoveredQualityRows = db.select({ run: conductorRuns, wfmId: workflowMarkdowns.id, filePath: workflowMarkdowns.filePath }).from(conductorRuns).innerJoin(workflowMarkdowns, eq(workflowMarkdowns.id, conductorRuns.workflowMarkdownId)).where(
|
|
26734
|
+
and(
|
|
26735
|
+
eq(conductorRuns.projectId, projectId),
|
|
26736
|
+
inArray(conductorRuns.conductorType, ["quality", "defect"])
|
|
26737
|
+
)
|
|
26738
|
+
).all();
|
|
26739
|
+
for (const { run, wfmId, filePath } of discoveredQualityRows) {
|
|
26740
|
+
if (!filePath.endsWith("BUG_MASTER.md")) continue;
|
|
26741
|
+
const versionId = run.prdVersionId ?? currentVersionId;
|
|
26742
|
+
let bugApps = bugAppsByVersion.get(versionId);
|
|
26743
|
+
if (!bugApps) {
|
|
26744
|
+
bugApps = getAppsWithBugsInVersion(db, projectId, versionId);
|
|
26745
|
+
bugAppsByVersion.set(versionId, bugApps);
|
|
26746
|
+
}
|
|
26747
|
+
if (bugApps.has(run.applicationId)) continue;
|
|
26748
|
+
stopWatcher(run.id);
|
|
26749
|
+
db.delete(conductorRuns).where(eq(conductorRuns.id, run.id)).run();
|
|
26750
|
+
const remaining = db.select({ id: conductorRuns.id }).from(conductorRuns).where(eq(conductorRuns.workflowMarkdownId, wfmId)).limit(1).get();
|
|
26751
|
+
if (!remaining) db.delete(workflowMarkdowns).where(eq(workflowMarkdowns.id, wfmId)).run();
|
|
26752
|
+
prunedRuns++;
|
|
26753
|
+
}
|
|
26686
26754
|
let discoveredRuns = 0;
|
|
26687
26755
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
26688
26756
|
for (const app of apps) {
|
|
@@ -26693,6 +26761,9 @@ function rescanProjectWorkflows(db, workspacePath, projectId, user, watcherInter
|
|
|
26693
26761
|
if ((conductorType === "prepare" || conductorType === "develop") && affectedForCurrentVersion !== null && !affectedForCurrentVersion.has(app.id)) {
|
|
26694
26762
|
continue;
|
|
26695
26763
|
}
|
|
26764
|
+
if (conductorType === "quality" && !bugAppsForCurrentVersion.has(app.id)) {
|
|
26765
|
+
continue;
|
|
26766
|
+
}
|
|
26696
26767
|
const aliases = conductorType === "quality" ? ["quality", "defect"] : [conductorType];
|
|
26697
26768
|
const known = db.select({
|
|
26698
26769
|
status: conductorRuns.status,
|
|
@@ -26786,7 +26857,7 @@ function rescanProjectWorkflows(db, workspacePath, projectId, user, watcherInter
|
|
|
26786
26857
|
}
|
|
26787
26858
|
}
|
|
26788
26859
|
}
|
|
26789
|
-
return { rescannedRuns, discoveredRuns };
|
|
26860
|
+
return { rescannedRuns, discoveredRuns, prunedRuns };
|
|
26790
26861
|
}
|
|
26791
26862
|
function getWorkflowRun(db, workflowMarkdownId, workspacePath) {
|
|
26792
26863
|
const wfm = db.select().from(workflowMarkdowns).where(eq(workflowMarkdowns.id, workflowMarkdownId)).get();
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rashidee/co2",
|
|
3
|
-
"version": "1.3.
|
|
4
|
-
"description": "Compound Context Studio
|
|
3
|
+
"version": "1.3.29",
|
|
4
|
+
"description": "Compound Context Studio  self-hosted team context authoring for CO2 projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"publishConfig": {
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "co2-skills",
|
|
3
|
-
"version": "1.8.
|
|
4
|
-
"description": "Compound Context Skills
|
|
5
|
-
"author": {
|
|
6
|
-
"name": "Rashidee M.Rashid"
|
|
7
|
-
},
|
|
8
|
-
"repository": "https://github.com/rashidee/co2-skills",
|
|
9
|
-
"license": "MIT",
|
|
10
|
-
"keywords": [
|
|
11
|
-
"context-engineering",
|
|
12
|
-
"user-stories",
|
|
13
|
-
"code-generation",
|
|
14
|
-
"ddd",
|
|
15
|
-
"spring-boot",
|
|
16
|
-
"laravel",
|
|
17
|
-
"playwright",
|
|
18
|
-
"mockups",
|
|
19
|
-
"specifications",
|
|
20
|
-
"data-modeling"
|
|
21
|
-
]
|
|
22
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "co2-skills",
|
|
3
|
+
"version": "1.8.5",
|
|
4
|
+
"description": "Compound Context Skills — an opinionated context engineering methodology for AI-driven software development. Generates data models, HTML mockups, technical specifications, test specifications, and orchestrates full-stack development from Agile user stories.",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Rashidee M.Rashid"
|
|
7
|
+
},
|
|
8
|
+
"repository": "https://github.com/rashidee/co2-skills",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"context-engineering",
|
|
12
|
+
"user-stories",
|
|
13
|
+
"code-generation",
|
|
14
|
+
"ddd",
|
|
15
|
+
"spring-boot",
|
|
16
|
+
"laravel",
|
|
17
|
+
"playwright",
|
|
18
|
+
"mockups",
|
|
19
|
+
"specifications",
|
|
20
|
+
"data-modeling"
|
|
21
|
+
]
|
|
22
|
+
}
|