openplanr 2.6.1 → 2.6.3
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/CHANGELOG.md +17 -0
- package/dist/dashboard/.vite/manifest.json +1 -1
- package/dist/dashboard/assets/{index-BaARCc1f.js → index-AeydhSKa.js} +2 -2
- package/dist/dashboard/assets/{index-BaARCc1f.js.map → index-AeydhSKa.js.map} +1 -1
- package/dist/dashboard/dashboard-manifest.json +8 -8
- package/dist/dashboard/index.html +1 -1
- package/dist/services/diagram-artifact-service.d.ts +26 -0
- package/dist/services/diagram-artifact-service.d.ts.map +1 -1
- package/dist/services/diagram-artifact-service.js +10 -0
- package/dist/services/diagram-artifact-service.js.map +1 -1
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +1 -1
- package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
- package/lib/host-packages/claude/openplanr/.openplanr-content.json +11 -11
- package/lib/host-packages/claude/openplanr/skills/design/scripts/design.mjs +80 -1
- package/lib/host-packages/claude/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/design.mjs +80 -1
- package/lib/host-packages/claude/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/design.mjs +80 -1
- package/lib/host-packages/claude/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-fidelity.md +14 -0
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/design.mjs +80 -1
- package/lib/host-packages/claude/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +11 -11
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/design.mjs +80 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/design.mjs +80 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/design.mjs +80 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-design-review/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-fidelity.md +14 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/design.mjs +80 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
- package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
- package/lib/host-packages/openai/openplanr/.openplanr-content.json +11 -11
- package/lib/host-packages/openai/openplanr/skills/design/scripts/design.mjs +80 -1
- package/lib/host-packages/openai/openplanr/skills/design/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/design.mjs +80 -1
- package/lib/host-packages/openai/openplanr/skills/design-loop/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/design.mjs +80 -1
- package/lib/host-packages/openai/openplanr/skills/design-review/scripts/runtime/packages/protocol/package.json +5 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-fidelity.md +14 -0
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/design.mjs +80 -1
- package/lib/host-packages/openai/openplanr/skills/plan/scripts/runtime/packages/protocol/package.json +5 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,6 +83,10 @@
|
|
|
83
83
|
"./enterprise-contracts": {
|
|
84
84
|
"types": "./src/enterprise-contracts.d.mts",
|
|
85
85
|
"import": "./src/enterprise-contracts.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./diagram-authoring-contracts": {
|
|
88
|
+
"types": "./src/diagram-authoring-contracts.d.mts",
|
|
89
|
+
"import": "./src/diagram-authoring-contracts.mjs"
|
|
86
90
|
}
|
|
87
91
|
},
|
|
88
92
|
"files": [
|
|
@@ -14910,6 +14910,7 @@ function createArtifactReviewServer({
|
|
|
14910
14910
|
throw artifactError(ARTIFACT_ERROR_CODES.LOOPBACK_STATE, "Artifact review instance id is invalid.");
|
|
14911
14911
|
}
|
|
14912
14912
|
const sessions = /* @__PURE__ */ new Map();
|
|
14913
|
+
const ownerSessions = /* @__PURE__ */ new Map();
|
|
14913
14914
|
let port = null;
|
|
14914
14915
|
let closePromise = null;
|
|
14915
14916
|
let pendingRegistrations = 0;
|
|
@@ -14917,7 +14918,7 @@ function createArtifactReviewServer({
|
|
|
14917
14918
|
let draining = false;
|
|
14918
14919
|
let emptyTimer = null;
|
|
14919
14920
|
const stageRuntime = () => readFileSync11(STAGE_RUNTIME_PATH, "utf8");
|
|
14920
|
-
const idle = () => sessions.size === 0 && pendingRegistrations === 0 && activeRequests === 0;
|
|
14921
|
+
const idle = () => sessions.size === 0 && ownerSessions.size === 0 && pendingRegistrations === 0 && activeRequests === 0;
|
|
14921
14922
|
const scheduleEmpty = () => {
|
|
14922
14923
|
if (emptyTimer || draining || typeof onEmpty !== "function") return;
|
|
14923
14924
|
emptyTimer = setTimeout(async () => {
|
|
@@ -15042,6 +15043,55 @@ function createArtifactReviewServer({
|
|
|
15042
15043
|
notFound(res, { head });
|
|
15043
15044
|
return;
|
|
15044
15045
|
}
|
|
15046
|
+
if (segments[0] === "o") {
|
|
15047
|
+
const owner = safeSessionId(segments[1]) && ownerSessions.get(segments[1]);
|
|
15048
|
+
if (draining || !sessionMatches(owner, segments[2])) {
|
|
15049
|
+
notFound(res, { head });
|
|
15050
|
+
return;
|
|
15051
|
+
}
|
|
15052
|
+
if (segments.length === 3 && !trailingSlash && ["GET", "HEAD"].includes(req.method)) {
|
|
15053
|
+
send(res, 308, "", { location: `/o/${owner.id}/${owner.capability}/` }, { head });
|
|
15054
|
+
return;
|
|
15055
|
+
}
|
|
15056
|
+
const request2 = Promise.resolve().then(() => owner.handleRequest({
|
|
15057
|
+
req,
|
|
15058
|
+
segments: segments.slice(3),
|
|
15059
|
+
head,
|
|
15060
|
+
origin: `http://${LOOPBACK_HOST}:${port}`,
|
|
15061
|
+
recoveryScope: owner.recoveryScope
|
|
15062
|
+
}));
|
|
15063
|
+
owner.pending.add(request2);
|
|
15064
|
+
let response;
|
|
15065
|
+
try {
|
|
15066
|
+
response = await request2;
|
|
15067
|
+
} finally {
|
|
15068
|
+
owner.pending.delete(request2);
|
|
15069
|
+
}
|
|
15070
|
+
if (!response) {
|
|
15071
|
+
notFound(res, { head });
|
|
15072
|
+
return;
|
|
15073
|
+
}
|
|
15074
|
+
if (response.kind === "asset") {
|
|
15075
|
+
const mediaTypes = { document: "text/html", runtime: "text/javascript", stylesheet: "text/css" };
|
|
15076
|
+
if (!Object.hasOwn(mediaTypes, response.asset) || typeof response.body !== "string") throw new Error("Invalid owner asset response.");
|
|
15077
|
+
send(res, response.status, response.body, {
|
|
15078
|
+
...parentHeaders(),
|
|
15079
|
+
"content-type": `${mediaTypes[response.asset]}; charset=utf-8`,
|
|
15080
|
+
"content-security-policy": "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: blob:; font-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'"
|
|
15081
|
+
}, { head });
|
|
15082
|
+
return;
|
|
15083
|
+
}
|
|
15084
|
+
send(res, response.status, JSON.stringify(response.body), {
|
|
15085
|
+
// Rejections may precede body consumption (for example Content-Length
|
|
15086
|
+
// above the limit). Do not reuse a socket containing unread body bytes.
|
|
15087
|
+
...response.status >= 400 ? { connection: "close" } : {},
|
|
15088
|
+
"content-type": "application/json; charset=utf-8",
|
|
15089
|
+
"cross-origin-resource-policy": "same-origin",
|
|
15090
|
+
"content-security-policy": "default-src 'none'; frame-ancestors 'none'",
|
|
15091
|
+
"x-frame-options": "DENY"
|
|
15092
|
+
}, { head });
|
|
15093
|
+
return;
|
|
15094
|
+
}
|
|
15045
15095
|
if (segments.length < 3 || segments[0] !== "r" || !safeSessionId(segments[1])) {
|
|
15046
15096
|
notFound(res, { head });
|
|
15047
15097
|
return;
|
|
@@ -15200,6 +15250,32 @@ function createArtifactReviewServer({
|
|
|
15200
15250
|
controlToken,
|
|
15201
15251
|
instanceId,
|
|
15202
15252
|
sessionCount: () => sessions.size,
|
|
15253
|
+
/** Trusted local authority only; this operation has no HTTP control route. */
|
|
15254
|
+
registerOwnerSession({ handleRequest } = {}) {
|
|
15255
|
+
if (draining || closePromise || typeof handleRequest !== "function") {
|
|
15256
|
+
throw artifactError(ARTIFACT_ERROR_CODES.LOOPBACK_STATE, "Local owner session cannot be registered.");
|
|
15257
|
+
}
|
|
15258
|
+
const id4 = mintCapabilityToken({ bytes: SESSION_ID_BYTES });
|
|
15259
|
+
const owner = {
|
|
15260
|
+
id: id4,
|
|
15261
|
+
capability: mintCapabilityToken({ bytes: SESSION_TOKEN_BYTES }),
|
|
15262
|
+
recoveryScope: `diagram-owner_${id4}`,
|
|
15263
|
+
handleRequest,
|
|
15264
|
+
pending: /* @__PURE__ */ new Set()
|
|
15265
|
+
};
|
|
15266
|
+
ownerSessions.set(id4, owner);
|
|
15267
|
+
return Object.freeze({
|
|
15268
|
+
sessionId: id4,
|
|
15269
|
+
capability: owner.capability,
|
|
15270
|
+
recoveryScope: owner.recoveryScope,
|
|
15271
|
+
path: `/o/${id4}/${owner.capability}/`,
|
|
15272
|
+
async close() {
|
|
15273
|
+
ownerSessions.delete(id4);
|
|
15274
|
+
await Promise.allSettled([...owner.pending]);
|
|
15275
|
+
if (idle()) scheduleEmpty();
|
|
15276
|
+
}
|
|
15277
|
+
});
|
|
15278
|
+
},
|
|
15203
15279
|
isIdle: idle,
|
|
15204
15280
|
accepting: () => !draining && !closePromise,
|
|
15205
15281
|
beginCloseIfIdle() {
|
|
@@ -15224,6 +15300,9 @@ function createArtifactReviewServer({
|
|
|
15224
15300
|
emptyTimer = null;
|
|
15225
15301
|
closePromise = (async () => {
|
|
15226
15302
|
sessions.clear();
|
|
15303
|
+
const pendingOwners = [...ownerSessions.values()].flatMap((owner) => [...owner.pending]);
|
|
15304
|
+
ownerSessions.clear();
|
|
15305
|
+
await Promise.allSettled(pendingOwners);
|
|
15227
15306
|
await closeHttpServer(server);
|
|
15228
15307
|
})();
|
|
15229
15308
|
return closePromise;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,6 +83,10 @@
|
|
|
83
83
|
"./enterprise-contracts": {
|
|
84
84
|
"types": "./src/enterprise-contracts.d.mts",
|
|
85
85
|
"import": "./src/enterprise-contracts.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./diagram-authoring-contracts": {
|
|
88
|
+
"types": "./src/diagram-authoring-contracts.d.mts",
|
|
89
|
+
"import": "./src/diagram-authoring-contracts.mjs"
|
|
86
90
|
}
|
|
87
91
|
},
|
|
88
92
|
"files": [
|
|
@@ -4,6 +4,20 @@ Use this reference when the user requests Mermaid or Excalidraw editing, imports
|
|
|
4
4
|
an existing source, or asks why a projection was omitted.
|
|
5
5
|
|
|
6
6
|
- Canonical `.planr-diagram.json` is the semantic source and is always editable.
|
|
7
|
+
- For the v1.13 flowchart authoring path, the `.planr-diagram-bundle.json` holds
|
|
8
|
+
the semantic document, presentation, exact original Mermaid text, and source
|
|
9
|
+
correspondence. Use `@openplanr/artifact/diagram-authoring`'s
|
|
10
|
+
`previewMermaidCopy`, `adoptMermaidCopy`, and `exportMermaidCopy` for copy
|
|
11
|
+
interchange. Preview never saves; adoption requires acknowledgement of that
|
|
12
|
+
exact preview's fidelity losses. Saving the bundle is a separate owner action.
|
|
13
|
+
- The certified Mermaid copy subset supports explicit flowchart node IDs,
|
|
14
|
+
rectangle/rounded/decision/cylinder shapes, directed/bidirectional/undirected
|
|
15
|
+
edges, labels, and nested subgraphs. It does not infer lanes or preserve
|
|
16
|
+
coordinates, manual routes, annotations, styling, or exact source formatting
|
|
17
|
+
on export. Keep the complete bundle when these matter. Copy import/export
|
|
18
|
+
never creates a repository source link or watcher.
|
|
19
|
+
- Legacy sequence diagrams remain readable and renderable; they are not in the
|
|
20
|
+
editable Mermaid copy certification.
|
|
7
21
|
- Mermaid is emitted only when the selected grammar has a certified projection.
|
|
8
22
|
`editable`, `partial`, and `unsupported` are honest compatibility levels, not
|
|
9
23
|
success or failure labels.
|
|
@@ -14910,6 +14910,7 @@ function createArtifactReviewServer({
|
|
|
14910
14910
|
throw artifactError(ARTIFACT_ERROR_CODES.LOOPBACK_STATE, "Artifact review instance id is invalid.");
|
|
14911
14911
|
}
|
|
14912
14912
|
const sessions = /* @__PURE__ */ new Map();
|
|
14913
|
+
const ownerSessions = /* @__PURE__ */ new Map();
|
|
14913
14914
|
let port = null;
|
|
14914
14915
|
let closePromise = null;
|
|
14915
14916
|
let pendingRegistrations = 0;
|
|
@@ -14917,7 +14918,7 @@ function createArtifactReviewServer({
|
|
|
14917
14918
|
let draining = false;
|
|
14918
14919
|
let emptyTimer = null;
|
|
14919
14920
|
const stageRuntime = () => readFileSync11(STAGE_RUNTIME_PATH, "utf8");
|
|
14920
|
-
const idle = () => sessions.size === 0 && pendingRegistrations === 0 && activeRequests === 0;
|
|
14921
|
+
const idle = () => sessions.size === 0 && ownerSessions.size === 0 && pendingRegistrations === 0 && activeRequests === 0;
|
|
14921
14922
|
const scheduleEmpty = () => {
|
|
14922
14923
|
if (emptyTimer || draining || typeof onEmpty !== "function") return;
|
|
14923
14924
|
emptyTimer = setTimeout(async () => {
|
|
@@ -15042,6 +15043,55 @@ function createArtifactReviewServer({
|
|
|
15042
15043
|
notFound(res, { head });
|
|
15043
15044
|
return;
|
|
15044
15045
|
}
|
|
15046
|
+
if (segments[0] === "o") {
|
|
15047
|
+
const owner = safeSessionId(segments[1]) && ownerSessions.get(segments[1]);
|
|
15048
|
+
if (draining || !sessionMatches(owner, segments[2])) {
|
|
15049
|
+
notFound(res, { head });
|
|
15050
|
+
return;
|
|
15051
|
+
}
|
|
15052
|
+
if (segments.length === 3 && !trailingSlash && ["GET", "HEAD"].includes(req.method)) {
|
|
15053
|
+
send(res, 308, "", { location: `/o/${owner.id}/${owner.capability}/` }, { head });
|
|
15054
|
+
return;
|
|
15055
|
+
}
|
|
15056
|
+
const request2 = Promise.resolve().then(() => owner.handleRequest({
|
|
15057
|
+
req,
|
|
15058
|
+
segments: segments.slice(3),
|
|
15059
|
+
head,
|
|
15060
|
+
origin: `http://${LOOPBACK_HOST}:${port}`,
|
|
15061
|
+
recoveryScope: owner.recoveryScope
|
|
15062
|
+
}));
|
|
15063
|
+
owner.pending.add(request2);
|
|
15064
|
+
let response;
|
|
15065
|
+
try {
|
|
15066
|
+
response = await request2;
|
|
15067
|
+
} finally {
|
|
15068
|
+
owner.pending.delete(request2);
|
|
15069
|
+
}
|
|
15070
|
+
if (!response) {
|
|
15071
|
+
notFound(res, { head });
|
|
15072
|
+
return;
|
|
15073
|
+
}
|
|
15074
|
+
if (response.kind === "asset") {
|
|
15075
|
+
const mediaTypes = { document: "text/html", runtime: "text/javascript", stylesheet: "text/css" };
|
|
15076
|
+
if (!Object.hasOwn(mediaTypes, response.asset) || typeof response.body !== "string") throw new Error("Invalid owner asset response.");
|
|
15077
|
+
send(res, response.status, response.body, {
|
|
15078
|
+
...parentHeaders(),
|
|
15079
|
+
"content-type": `${mediaTypes[response.asset]}; charset=utf-8`,
|
|
15080
|
+
"content-security-policy": "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: blob:; font-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'"
|
|
15081
|
+
}, { head });
|
|
15082
|
+
return;
|
|
15083
|
+
}
|
|
15084
|
+
send(res, response.status, JSON.stringify(response.body), {
|
|
15085
|
+
// Rejections may precede body consumption (for example Content-Length
|
|
15086
|
+
// above the limit). Do not reuse a socket containing unread body bytes.
|
|
15087
|
+
...response.status >= 400 ? { connection: "close" } : {},
|
|
15088
|
+
"content-type": "application/json; charset=utf-8",
|
|
15089
|
+
"cross-origin-resource-policy": "same-origin",
|
|
15090
|
+
"content-security-policy": "default-src 'none'; frame-ancestors 'none'",
|
|
15091
|
+
"x-frame-options": "DENY"
|
|
15092
|
+
}, { head });
|
|
15093
|
+
return;
|
|
15094
|
+
}
|
|
15045
15095
|
if (segments.length < 3 || segments[0] !== "r" || !safeSessionId(segments[1])) {
|
|
15046
15096
|
notFound(res, { head });
|
|
15047
15097
|
return;
|
|
@@ -15200,6 +15250,32 @@ function createArtifactReviewServer({
|
|
|
15200
15250
|
controlToken,
|
|
15201
15251
|
instanceId,
|
|
15202
15252
|
sessionCount: () => sessions.size,
|
|
15253
|
+
/** Trusted local authority only; this operation has no HTTP control route. */
|
|
15254
|
+
registerOwnerSession({ handleRequest } = {}) {
|
|
15255
|
+
if (draining || closePromise || typeof handleRequest !== "function") {
|
|
15256
|
+
throw artifactError(ARTIFACT_ERROR_CODES.LOOPBACK_STATE, "Local owner session cannot be registered.");
|
|
15257
|
+
}
|
|
15258
|
+
const id4 = mintCapabilityToken({ bytes: SESSION_ID_BYTES });
|
|
15259
|
+
const owner = {
|
|
15260
|
+
id: id4,
|
|
15261
|
+
capability: mintCapabilityToken({ bytes: SESSION_TOKEN_BYTES }),
|
|
15262
|
+
recoveryScope: `diagram-owner_${id4}`,
|
|
15263
|
+
handleRequest,
|
|
15264
|
+
pending: /* @__PURE__ */ new Set()
|
|
15265
|
+
};
|
|
15266
|
+
ownerSessions.set(id4, owner);
|
|
15267
|
+
return Object.freeze({
|
|
15268
|
+
sessionId: id4,
|
|
15269
|
+
capability: owner.capability,
|
|
15270
|
+
recoveryScope: owner.recoveryScope,
|
|
15271
|
+
path: `/o/${id4}/${owner.capability}/`,
|
|
15272
|
+
async close() {
|
|
15273
|
+
ownerSessions.delete(id4);
|
|
15274
|
+
await Promise.allSettled([...owner.pending]);
|
|
15275
|
+
if (idle()) scheduleEmpty();
|
|
15276
|
+
}
|
|
15277
|
+
});
|
|
15278
|
+
},
|
|
15203
15279
|
isIdle: idle,
|
|
15204
15280
|
accepting: () => !draining && !closePromise,
|
|
15205
15281
|
beginCloseIfIdle() {
|
|
@@ -15224,6 +15300,9 @@ function createArtifactReviewServer({
|
|
|
15224
15300
|
emptyTimer = null;
|
|
15225
15301
|
closePromise = (async () => {
|
|
15226
15302
|
sessions.clear();
|
|
15303
|
+
const pendingOwners = [...ownerSessions.values()].flatMap((owner) => [...owner.pending]);
|
|
15304
|
+
ownerSessions.clear();
|
|
15305
|
+
await Promise.allSettled(pendingOwners);
|
|
15227
15306
|
await closeHttpServer(server);
|
|
15228
15307
|
})();
|
|
15229
15308
|
return closePromise;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openplanr/protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Canonical OpenPlanr schemas, registries, typed errors, and portable contract validation",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,6 +83,10 @@
|
|
|
83
83
|
"./enterprise-contracts": {
|
|
84
84
|
"types": "./src/enterprise-contracts.d.mts",
|
|
85
85
|
"import": "./src/enterprise-contracts.mjs"
|
|
86
|
+
},
|
|
87
|
+
"./diagram-authoring-contracts": {
|
|
88
|
+
"types": "./src/diagram-authoring-contracts.d.mts",
|
|
89
|
+
"import": "./src/diagram-authoring-contracts.mjs"
|
|
86
90
|
}
|
|
87
91
|
},
|
|
88
92
|
"files": [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openplanr",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"description": "Deterministic OpenPlanr utilities for planning storage, validation, rendering, setup, diagnostics, and GitHub/Linear synchronization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cli/index.js",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
"zod": "^4.3.6"
|
|
116
116
|
},
|
|
117
117
|
"optionalDependencies": {
|
|
118
|
-
"planr-pipeline": "0.
|
|
118
|
+
"planr-pipeline": "0.51.0"
|
|
119
119
|
},
|
|
120
120
|
"devDependencies": {
|
|
121
121
|
"@biomejs/biome": "^2.4.9",
|