openplanr 2.6.3 → 2.2639.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/CHANGELOG.md +8 -0
- package/dist/cli/commands/company.d.ts.map +1 -1
- package/dist/cli/commands/company.js +23 -1
- package/dist/cli/commands/company.js.map +1 -1
- package/dist/cli/commands/diagram/index.d.ts.map +1 -1
- package/dist/cli/commands/diagram/index.js +63 -0
- package/dist/cli/commands/diagram/index.js.map +1 -1
- package/dist/services/company-sync-service.d.ts +44 -0
- package/dist/services/company-sync-service.d.ts.map +1 -1
- package/dist/services/company-sync-service.js +256 -7
- package/dist/services/company-sync-service.js.map +1 -1
- package/dist/services/diagram-authoring-service.d.ts +99 -0
- package/dist/services/diagram-authoring-service.d.ts.map +1 -0
- package/dist/services/diagram-authoring-service.js +184 -0
- package/dist/services/diagram-authoring-service.js.map +1 -0
- package/lib/host-packages/adapter-registry.json +5 -5
- package/lib/host-packages/capability-map.json +2 -2
- 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 +4 -4
- package/lib/host-packages/claude/openplanr/skills/diagram/SKILL.md +20 -1
- package/lib/host-packages/claude/openplanr/skills/diagram/references/diagram-intent-to-ir.md +9 -0
- package/lib/host-packages/cursor/openplanr/.openplanr-content.json +4 -4
- package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram/references/diagram-intent-to-ir.md +9 -0
- package/lib/host-packages/cursor/openplanr/rules/planr-diagram.mdc +20 -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 +5 -5
- package/lib/host-packages/openai/openplanr/skills/diagram/SKILL.md +20 -1
- package/lib/host-packages/openai/openplanr/skills/diagram/agents/openai.yaml +2 -2
- package/lib/host-packages/openai/openplanr/skills/diagram/references/diagram-intent-to-ir.md +9 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.2639.0
|
|
4
|
+
|
|
5
|
+
Releases are now numbered by release week. The middle number is the year and ISO week the release was prepared in (2026, week 39), and further releases in the same week raise the last number. The version still increases with every release, so existing `^2` ranges accept it.
|
|
6
|
+
|
|
7
|
+
### Minor Changes
|
|
8
|
+
|
|
9
|
+
- b2e302c: Add canonical diagram creation, local owner editing, exact-base typed transaction previews, and explicit company revision adoption. Complete authored bundles now travel through reviewed publication and proposal application while preserving remote revision identity and atomic local custody; generated host guidance and command catalog cover the new workflow.
|
|
10
|
+
|
|
3
11
|
## 2.6.3
|
|
4
12
|
|
|
5
13
|
## 2.6.2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAmOtD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loginCompany, logoutCompany, storeCompanyManualToken, } from '../../services/company-auth-service.js';
|
|
2
|
-
import { applyCompanyProposal, companyApi, companyBindingStatus, previewCompanyProposal, previewCompanyPublication, previewCompanyPull, previewCompanyPush, publishCompanyPreview, pullCompanyBinding, pushCompanyBinding, resolveCompanyOrigin, } from '../../services/company-sync-service.js';
|
|
2
|
+
import { adoptCompanyDiagramRevision, applyCompanyProposal, companyApi, companyBindingStatus, previewCompanyDiagramAdoption, previewCompanyProposal, previewCompanyPublication, previewCompanyPull, previewCompanyPush, publishCompanyPreview, pullCompanyBinding, pushCompanyBinding, resolveCompanyOrigin, } from '../../services/company-sync-service.js';
|
|
3
3
|
function print(value) {
|
|
4
4
|
process.stdout.write(JSON.stringify(value, null, 2) + '\n');
|
|
5
5
|
}
|
|
@@ -104,6 +104,28 @@ export function registerCompanyCommand(program) {
|
|
|
104
104
|
.option('--api-url <origin>', 'company API HTTPS origin override')
|
|
105
105
|
.option('--json', 'structured output')
|
|
106
106
|
.action(async (options) => print(await companyApi(resolveCompanyOrigin(options.apiUrl), '/v1/projects')));
|
|
107
|
+
company
|
|
108
|
+
.command('adopt')
|
|
109
|
+
.argument('<artifact-id>', 'company diagram artifact ID')
|
|
110
|
+
.requiredOption('--project <id>', 'company project ID')
|
|
111
|
+
.requiredOption('--revision <id>', 'exact authorized revision ID')
|
|
112
|
+
.requiredOption('--path <file>', 'canonical local diagrams/{slug}/{slug}.planr-diagram-bundle.json')
|
|
113
|
+
.option('--api-url <origin>', 'company API HTTPS origin override')
|
|
114
|
+
.option('--accept <preview-token>', 'adopt the exact reviewed revision and local target')
|
|
115
|
+
.option('--json', 'structured output')
|
|
116
|
+
.description('Preview or explicitly adopt a company diagram revision into local authoring custody')
|
|
117
|
+
.action(async (artifactId, options) => {
|
|
118
|
+
const request = {
|
|
119
|
+
apiUrl: resolveCompanyOrigin(options.apiUrl),
|
|
120
|
+
projectId: options.project,
|
|
121
|
+
artifactId,
|
|
122
|
+
revisionId: options.revision,
|
|
123
|
+
filePath: options.path,
|
|
124
|
+
};
|
|
125
|
+
print(options.accept
|
|
126
|
+
? await adoptCompanyDiagramRevision(root(), { ...request, accept: options.accept })
|
|
127
|
+
: await previewCompanyDiagramAdoption(root(), request));
|
|
128
|
+
});
|
|
107
129
|
company
|
|
108
130
|
.command('preview')
|
|
109
131
|
.argument('<file>', 'repository-relative artifact; --kind design bundles an authored design document and its references')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../../src/cli/commands/company.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI7D"}
|
|
@@ -1,5 +1,22 @@
|
|
|
1
|
+
import { applyDiagramTransaction, DiagramAuthoringError, editDiagram, newDiagram, } from '../../../services/diagram-authoring-service.js';
|
|
1
2
|
import { diagramGallery, inspectDiagramInput, renderDiagramInput, rerenderDiagramInput, } from '../../../services/diagram-pipeline-service.js';
|
|
3
|
+
import { display, logger } from '../../../utils/logger.js';
|
|
2
4
|
import { presentDiagramGallery, presentDiagramResult } from './presentation.js';
|
|
5
|
+
function presentAuthoring(value, json) {
|
|
6
|
+
if (json) {
|
|
7
|
+
display.line(JSON.stringify(value));
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
logger.success(`${String(value.diagramId)}: ${String(value.status)}`);
|
|
11
|
+
if (value.path)
|
|
12
|
+
display.keyValue('Bundle', String(value.path));
|
|
13
|
+
if (value.url)
|
|
14
|
+
display.keyValue('Studio', String(value.url));
|
|
15
|
+
if (value.diff)
|
|
16
|
+
display.line(JSON.stringify(value.diff, null, 2));
|
|
17
|
+
if (value.nextAction)
|
|
18
|
+
display.line(`Next: ${String(value.nextAction)}`);
|
|
19
|
+
}
|
|
3
20
|
function projectDir(program) {
|
|
4
21
|
return program.opts().projectDir;
|
|
5
22
|
}
|
|
@@ -16,6 +33,52 @@ export function registerDiagramCommand(program) {
|
|
|
16
33
|
const diagram = program
|
|
17
34
|
.command('diagram')
|
|
18
35
|
.description('Create, verify, inspect, and rerender offline professional diagrams');
|
|
36
|
+
diagram
|
|
37
|
+
.command('new')
|
|
38
|
+
.argument('<path>', 'canonical diagrams/{slug}/{slug}.planr-diagram-bundle.json path')
|
|
39
|
+
.requiredOption('--title <title>', 'diagram title')
|
|
40
|
+
.option('--json', 'output one stable machine envelope')
|
|
41
|
+
.description('Create a canonical editable diagram bundle')
|
|
42
|
+
.action(async (input, options) => {
|
|
43
|
+
presentAuthoring(await newDiagram(projectDir(program), input, options.title ?? ''), Boolean(options.json));
|
|
44
|
+
});
|
|
45
|
+
diagram
|
|
46
|
+
.command('edit')
|
|
47
|
+
.argument('<path>', 'canonical diagram bundle path')
|
|
48
|
+
.option('--json', 'output one stable machine envelope')
|
|
49
|
+
.description('Open the local owner studio for an existing diagram')
|
|
50
|
+
.action(async (input, options) => {
|
|
51
|
+
const owner = await editDiagram(projectDir(program), input);
|
|
52
|
+
presentAuthoring({ ok: true, action: 'diagram.edit', status: 'open', diagramId: input, url: owner.baseUrl }, Boolean(options.json));
|
|
53
|
+
let stop;
|
|
54
|
+
try {
|
|
55
|
+
await new Promise((resolve) => {
|
|
56
|
+
stop = resolve;
|
|
57
|
+
process.once('SIGINT', stop);
|
|
58
|
+
process.once('SIGTERM', stop);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
if (stop) {
|
|
63
|
+
process.removeListener('SIGINT', stop);
|
|
64
|
+
process.removeListener('SIGTERM', stop);
|
|
65
|
+
}
|
|
66
|
+
await owner.close();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
diagram
|
|
70
|
+
.command('apply')
|
|
71
|
+
.argument('<path>', 'canonical diagram bundle path')
|
|
72
|
+
.requiredOption('--transaction <file>', 'typed diagram-edit-transaction JSON')
|
|
73
|
+
.option('--dry-run', 'preview semantic and layout changes without applying')
|
|
74
|
+
.option('--accept <preview-token>', 'apply the exact previewed transaction')
|
|
75
|
+
.option('--json', 'output one stable machine envelope')
|
|
76
|
+
.description('Preview a scoped edit, then explicitly accept that preview')
|
|
77
|
+
.action(async (input, options) => {
|
|
78
|
+
if (options.dryRun && options.accept)
|
|
79
|
+
throw new DiagramAuthoringError('E_DIAGRAM_OPTIONS', '--dry-run and --accept cannot be used together.');
|
|
80
|
+
presentAuthoring(await applyDiagramTransaction(projectDir(program), input, options.transaction ?? '', options.accept), Boolean(options.json));
|
|
81
|
+
});
|
|
19
82
|
diagram
|
|
20
83
|
.command('render')
|
|
21
84
|
.argument('<input>', 'canonical .planr-diagram.json or Mermaid source')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/diagram/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,8 @@ export interface CompanyPreview {
|
|
|
9
9
|
kind: 'diagram' | 'design' | 'plan' | 'document';
|
|
10
10
|
contentType: string;
|
|
11
11
|
contentDigest: string;
|
|
12
|
+
/** Canonical local bytes can differ from the immutable remote revision's bytes after adoption. */
|
|
13
|
+
localContentDigest?: string;
|
|
12
14
|
byteLength: number;
|
|
13
15
|
createdAt: string;
|
|
14
16
|
artifactId?: string;
|
|
@@ -107,6 +109,48 @@ interface CompanyPullPreview {
|
|
|
107
109
|
revision: CompanyRemoteRevision;
|
|
108
110
|
createdAt: string;
|
|
109
111
|
}
|
|
112
|
+
export declare function previewCompanyDiagramAdoption(root: string, options: {
|
|
113
|
+
apiUrl: string;
|
|
114
|
+
projectId: string;
|
|
115
|
+
artifactId: string;
|
|
116
|
+
revisionId: string;
|
|
117
|
+
filePath: string;
|
|
118
|
+
}): Promise<{
|
|
119
|
+
ok: true;
|
|
120
|
+
action: string;
|
|
121
|
+
status: "preview" | "collision";
|
|
122
|
+
organizationId: string;
|
|
123
|
+
projectId: string;
|
|
124
|
+
artifactId: string;
|
|
125
|
+
revisionId: string;
|
|
126
|
+
remoteContentDigest: string;
|
|
127
|
+
remoteByteLength: number;
|
|
128
|
+
localPath: string;
|
|
129
|
+
localCollision: boolean;
|
|
130
|
+
previewToken: string | null;
|
|
131
|
+
bundle: object;
|
|
132
|
+
notice: string;
|
|
133
|
+
}>;
|
|
134
|
+
export declare function adoptCompanyDiagramRevision(root: string, options: {
|
|
135
|
+
apiUrl: string;
|
|
136
|
+
projectId: string;
|
|
137
|
+
artifactId: string;
|
|
138
|
+
revisionId: string;
|
|
139
|
+
filePath: string;
|
|
140
|
+
accept: string;
|
|
141
|
+
}): Promise<{
|
|
142
|
+
ok: true;
|
|
143
|
+
action: string;
|
|
144
|
+
status: string;
|
|
145
|
+
bindingId: string;
|
|
146
|
+
organizationId: string;
|
|
147
|
+
projectId: string;
|
|
148
|
+
artifactId: string;
|
|
149
|
+
revisionId: string;
|
|
150
|
+
filePath: string;
|
|
151
|
+
remoteContentDigest: string;
|
|
152
|
+
localContentDigest: string | undefined;
|
|
153
|
+
}>;
|
|
110
154
|
export declare function previewCompanyPull(root: string, bindingId: string, options?: {
|
|
111
155
|
revisionId?: string;
|
|
112
156
|
}): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"company-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/company-sync-service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"company-sync-service.d.ts","sourceRoot":"","sources":["../../src/services/company-sync-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import path from 'node:path';
|
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
5
|
import { resolveCompanyAccessToken } from './company-auth-service.js';
|
|
6
6
|
import { CompanySyncError, normalizeCompanyOrigin } from './company-common.js';
|
|
7
|
+
import { adoptDiagramBundle, canonicalDiagramTarget, commitReviewedDiagramSuccessor, } from './diagram-authoring-service.js';
|
|
7
8
|
import { resolvePipelinePackage } from './pipeline-package-service.js';
|
|
8
9
|
export { CompanySyncError, DEFAULT_COMPANY_API_ORIGIN, normalizeCompanyOrigin, resolveCompanyOrigin, } from './company-common.js';
|
|
9
10
|
const fail = (code, message, cause) => {
|
|
@@ -17,6 +18,7 @@ const id = (value) => typeof value === 'string' &&
|
|
|
17
18
|
: fail('E_COMPANY_ID', 'Invalid company resource identifier.');
|
|
18
19
|
const MAX_BYTES = 1024 * 1024;
|
|
19
20
|
const MAX_RESPONSE_BYTES = 2 * 1024 * 1024;
|
|
21
|
+
const expectedLocalDigest = (binding) => binding.localContentDigest ?? binding.contentDigest;
|
|
20
22
|
// Reject C0 controls and DEL in externally supplied paths and element identifiers.
|
|
21
23
|
function hasControlCharacters(value) {
|
|
22
24
|
return [...value].some((character) => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);
|
|
@@ -170,6 +172,7 @@ async function loadState(root, section, key) {
|
|
|
170
172
|
data.id !== key ||
|
|
171
173
|
typeof data.contentDigest !== 'string' ||
|
|
172
174
|
!/^[a-f0-9]{64}$/.test(data.contentDigest) ||
|
|
175
|
+
(data.localContentDigest !== undefined && !isDigest(data.localContentDigest)) ||
|
|
173
176
|
typeof data.filePath !== 'string' ||
|
|
174
177
|
typeof data.title !== 'string' ||
|
|
175
178
|
!data.title.trim() ||
|
|
@@ -324,6 +327,26 @@ function checkContent(content) {
|
|
|
324
327
|
if (/-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----|(?:sk_live_|ghp_)[A-Za-z0-9]{20,}|(?:authorization["']?\s*[:=]\s*["']?bearer\s+)[A-Za-z0-9._-]{20,}/i.test(content))
|
|
325
328
|
fail('E_COMPANY_SENSITIVE', 'This artifact appears to contain credentials. Remove them before sharing.');
|
|
326
329
|
}
|
|
330
|
+
async function diagramAuthoringRuntime() {
|
|
331
|
+
const pipeline = resolvePipelinePackage(true);
|
|
332
|
+
if (!pipeline)
|
|
333
|
+
return fail('E_COMPANY_RUNTIME', 'The diagram authoring runtime is unavailable.');
|
|
334
|
+
const runtime = await import(pathToFileURL(path.join(pipeline.root, 'lib/artifact/diagram/authoring/index.mjs')).href);
|
|
335
|
+
if (typeof runtime.validateAuthoringBundle !== 'function' ||
|
|
336
|
+
typeof runtime.diffDiagramBundles !== 'function')
|
|
337
|
+
return fail('E_COMPANY_RUNTIME', 'The installed workflow package does not support complete diagram bundles.');
|
|
338
|
+
return runtime;
|
|
339
|
+
}
|
|
340
|
+
async function assertCompleteDiagramBundle(content, filePath) {
|
|
341
|
+
const checked = (await diagramAuthoringRuntime()).validateAuthoringBundle(content);
|
|
342
|
+
if (!checked.ok)
|
|
343
|
+
return fail('E_COMPANY_AUTHORING', 'The complete diagram bundle is invalid or unsupported.');
|
|
344
|
+
const bundle = content;
|
|
345
|
+
if (filePath &&
|
|
346
|
+
filePath !== `diagrams/${bundle.diagramId}/${bundle.diagramId}.planr-diagram-bundle.json`)
|
|
347
|
+
return fail('E_COMPANY_SCOPE', 'Publish the canonical diagram-authoring-bundle file.');
|
|
348
|
+
return bundle;
|
|
349
|
+
}
|
|
327
350
|
async function prepareCompanyContent(root, source, detectDesign = false) {
|
|
328
351
|
const file = await safeFile(root, source.filePath);
|
|
329
352
|
const extension = path.extname(file).toLowerCase();
|
|
@@ -337,6 +360,19 @@ async function prepareCompanyContent(root, source, detectDesign = false) {
|
|
|
337
360
|
return fail('E_COMPANY_TYPE', 'Publish a JSON, Markdown, SVG, or HTML artifact.');
|
|
338
361
|
const original = await readArtifactFile(file);
|
|
339
362
|
checkContent(original);
|
|
363
|
+
if (source.kind === 'diagram' && extension === '.json') {
|
|
364
|
+
let parsed;
|
|
365
|
+
try {
|
|
366
|
+
parsed = JSON.parse(original);
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
/* Legacy JSON validation remains at its domain boundary. */
|
|
370
|
+
}
|
|
371
|
+
if (parsed &&
|
|
372
|
+
typeof parsed === 'object' &&
|
|
373
|
+
parsed.kind === 'diagram-authoring-bundle')
|
|
374
|
+
await assertCompleteDiagramBundle(parsed, source.filePath);
|
|
375
|
+
}
|
|
340
376
|
let isDesignDocument = false;
|
|
341
377
|
if (source.kind === 'design' && extension === '.json') {
|
|
342
378
|
try {
|
|
@@ -644,7 +680,7 @@ export async function companyBindingStatus(root, bindingId) {
|
|
|
644
680
|
remote.headRevisionId === null)
|
|
645
681
|
return fail('E_COMPANY_RESPONSE', 'The remote artifact does not match its local binding.');
|
|
646
682
|
id(remote.headRevisionId);
|
|
647
|
-
const localChanged = hash(current) !== binding
|
|
683
|
+
const localChanged = hash(current) !== expectedLocalDigest(binding) || !sameSourceManifest(binding, prepared);
|
|
648
684
|
const remoteChanged = remote.headRevisionId !== binding.revisionId;
|
|
649
685
|
return {
|
|
650
686
|
ok: true,
|
|
@@ -744,6 +780,153 @@ async function remoteRevisionContent(binding, revision) {
|
|
|
744
780
|
return fail('E_COMPANY_INTEGRITY', 'The downloaded bytes do not match the selected revision digest and size.');
|
|
745
781
|
return content;
|
|
746
782
|
}
|
|
783
|
+
export async function previewCompanyDiagramAdoption(root, options) {
|
|
784
|
+
const apiUrl = normalizeCompanyOrigin(options.apiUrl);
|
|
785
|
+
const projectId = id(options.projectId);
|
|
786
|
+
const artifactId = id(options.artifactId);
|
|
787
|
+
const revisionId = id(options.revisionId);
|
|
788
|
+
assertSafeRelativePath(options.filePath);
|
|
789
|
+
const target = await canonicalDiagramTarget(root, options.filePath);
|
|
790
|
+
const remote = await companyApi(apiUrl, `/v1/projects/${projectId}/artifacts/${artifactId}`);
|
|
791
|
+
if (remote?.artifact?.id !== artifactId ||
|
|
792
|
+
remote.artifact.projectId !== projectId ||
|
|
793
|
+
remote.artifact.kind !== 'diagram')
|
|
794
|
+
return fail('E_COMPANY_SCOPE', 'The selected artifact is not a diagram in this company project.');
|
|
795
|
+
const organizationId = id(remote.artifact.organizationId);
|
|
796
|
+
const provisional = { apiUrl, organizationId, projectId, artifactId };
|
|
797
|
+
const revision = await findRemoteRevision(provisional, revisionId);
|
|
798
|
+
if (revision.contentType !== 'application/json')
|
|
799
|
+
return fail('E_COMPANY_TYPE', 'Adoption requires a complete JSON diagram bundle.');
|
|
800
|
+
const content = await remoteRevisionContent(provisional, revision);
|
|
801
|
+
let bundle;
|
|
802
|
+
try {
|
|
803
|
+
bundle = JSON.parse(content);
|
|
804
|
+
}
|
|
805
|
+
catch (cause) {
|
|
806
|
+
return fail('E_COMPANY_AUTHORING', 'The selected revision is not a JSON diagram bundle.', cause);
|
|
807
|
+
}
|
|
808
|
+
if (!bundle ||
|
|
809
|
+
typeof bundle !== 'object' ||
|
|
810
|
+
bundle.kind !== 'diagram-authoring-bundle')
|
|
811
|
+
return fail('E_COMPANY_AUTHORING', 'The selected revision is not a complete diagram-authoring-bundle.');
|
|
812
|
+
await assertCompleteDiagramBundle(bundle, options.filePath);
|
|
813
|
+
if (bundle.diagramId !== target.slug)
|
|
814
|
+
return fail('E_COMPANY_SCOPE', 'The selected revision identity does not match the local diagram path.');
|
|
815
|
+
const previewToken = hash(JSON.stringify([
|
|
816
|
+
apiUrl,
|
|
817
|
+
organizationId,
|
|
818
|
+
projectId,
|
|
819
|
+
artifactId,
|
|
820
|
+
revisionId,
|
|
821
|
+
revision.contentDigest,
|
|
822
|
+
options.filePath,
|
|
823
|
+
]));
|
|
824
|
+
let collision = false;
|
|
825
|
+
try {
|
|
826
|
+
const info = await lstat(target.file);
|
|
827
|
+
collision =
|
|
828
|
+
!info.isFile() ||
|
|
829
|
+
info.isSymbolicLink() ||
|
|
830
|
+
hash(await readArtifactFile(target.file)) !== hash(JSON.stringify(bundle, null, 2) + '\n');
|
|
831
|
+
if (!collision) {
|
|
832
|
+
// Matching loose bytes are not enough: only the authoring store can own a bundle.
|
|
833
|
+
const owner = await lstat(path.join(path.dirname(target.file), '.authoring', 'owner.json')).catch((error) => {
|
|
834
|
+
if (error.code === 'ENOENT')
|
|
835
|
+
return null;
|
|
836
|
+
throw error;
|
|
837
|
+
});
|
|
838
|
+
collision = !owner?.isFile() || owner.isSymbolicLink();
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
catch (error) {
|
|
842
|
+
if (error.code !== 'ENOENT')
|
|
843
|
+
throw error;
|
|
844
|
+
const entries = await readdir(path.dirname(target.file)).catch((directoryError) => {
|
|
845
|
+
if (directoryError.code === 'ENOENT')
|
|
846
|
+
return [];
|
|
847
|
+
throw directoryError;
|
|
848
|
+
});
|
|
849
|
+
collision = entries.length > 0;
|
|
850
|
+
}
|
|
851
|
+
return {
|
|
852
|
+
ok: true,
|
|
853
|
+
action: 'company.adopt-preview',
|
|
854
|
+
status: collision ? 'collision' : 'preview',
|
|
855
|
+
organizationId,
|
|
856
|
+
projectId,
|
|
857
|
+
artifactId,
|
|
858
|
+
revisionId,
|
|
859
|
+
remoteContentDigest: revision.contentDigest,
|
|
860
|
+
remoteByteLength: revision.byteLength,
|
|
861
|
+
localPath: options.filePath,
|
|
862
|
+
localCollision: collision,
|
|
863
|
+
previewToken: collision ? null : previewToken,
|
|
864
|
+
bundle,
|
|
865
|
+
notice: collision
|
|
866
|
+
? 'The local target already differs. Resolve the collision before adopting; no file was changed.'
|
|
867
|
+
: 'Review this exact company revision and target, then explicitly accept its preview token. Pull remains an inspection-only operation.',
|
|
868
|
+
};
|
|
869
|
+
}
|
|
870
|
+
export async function adoptCompanyDiagramRevision(root, options) {
|
|
871
|
+
const preview = await previewCompanyDiagramAdoption(root, options);
|
|
872
|
+
const previewToken = preview.previewToken;
|
|
873
|
+
if (!previewToken || previewToken !== options.accept)
|
|
874
|
+
return fail('E_COMPANY_CONFLICT', 'The selected revision, scope, or local target no longer matches the reviewed adoption preview.');
|
|
875
|
+
return withBindingLock(root, previewToken, async () => {
|
|
876
|
+
const candidateLocalDigest = hash(JSON.stringify(preview.bundle, null, 2) + '\n');
|
|
877
|
+
let prior;
|
|
878
|
+
try {
|
|
879
|
+
prior = (await loadState(root, 'bindings', previewToken));
|
|
880
|
+
}
|
|
881
|
+
catch (error) {
|
|
882
|
+
if (error.code !== 'ENOENT')
|
|
883
|
+
throw error;
|
|
884
|
+
}
|
|
885
|
+
if (prior &&
|
|
886
|
+
(prior.organizationId !== preview.organizationId ||
|
|
887
|
+
prior.projectId !== preview.projectId ||
|
|
888
|
+
prior.artifactId !== preview.artifactId ||
|
|
889
|
+
prior.revisionId !== preview.revisionId ||
|
|
890
|
+
prior.filePath !== options.filePath ||
|
|
891
|
+
prior.contentDigest !== preview.remoteContentDigest ||
|
|
892
|
+
expectedLocalDigest(prior) !== candidateLocalDigest))
|
|
893
|
+
return fail('E_COMPANY_STATE', 'Existing adoption binding conflicts with the reviewed revision.');
|
|
894
|
+
const adopted = await adoptDiagramBundle(root, options.filePath, preview.bundle, preview.remoteContentDigest);
|
|
895
|
+
const localContent = await readArtifactFile(await safeFile(root, options.filePath));
|
|
896
|
+
const binding = {
|
|
897
|
+
schemaVersion: '1.0.0',
|
|
898
|
+
id: previewToken,
|
|
899
|
+
apiUrl: normalizeCompanyOrigin(options.apiUrl),
|
|
900
|
+
organizationId: preview.organizationId,
|
|
901
|
+
projectId: preview.projectId,
|
|
902
|
+
artifactId: preview.artifactId,
|
|
903
|
+
revisionId: preview.revisionId,
|
|
904
|
+
filePath: options.filePath,
|
|
905
|
+
title: preview.bundle.document.title,
|
|
906
|
+
kind: 'diagram',
|
|
907
|
+
contentType: 'application/json',
|
|
908
|
+
contentDigest: preview.remoteContentDigest,
|
|
909
|
+
localContentDigest: hash(localContent),
|
|
910
|
+
byteLength: preview.remoteByteLength,
|
|
911
|
+
createdAt: new Date().toISOString(),
|
|
912
|
+
};
|
|
913
|
+
if (!prior)
|
|
914
|
+
await saveState(root, 'bindings', binding.id, binding);
|
|
915
|
+
return {
|
|
916
|
+
ok: true,
|
|
917
|
+
action: 'company.adopt',
|
|
918
|
+
status: adopted.replayed ? 'already-adopted' : 'synchronized',
|
|
919
|
+
bindingId: binding.id,
|
|
920
|
+
organizationId: binding.organizationId,
|
|
921
|
+
projectId: binding.projectId,
|
|
922
|
+
artifactId: binding.artifactId,
|
|
923
|
+
revisionId: binding.revisionId,
|
|
924
|
+
filePath: binding.filePath,
|
|
925
|
+
remoteContentDigest: binding.contentDigest,
|
|
926
|
+
localContentDigest: binding.localContentDigest,
|
|
927
|
+
};
|
|
928
|
+
});
|
|
929
|
+
}
|
|
747
930
|
export async function previewCompanyPull(root, bindingId, options = {}) {
|
|
748
931
|
return withBindingLock(root, bindingId, async () => {
|
|
749
932
|
const binding = (await loadState(root, 'bindings', bindingId));
|
|
@@ -781,7 +964,7 @@ export async function previewCompanyPull(root, bindingId, options = {}) {
|
|
|
781
964
|
preview,
|
|
782
965
|
content,
|
|
783
966
|
comparison: {
|
|
784
|
-
localChanged: localDigest !== publicationSourceDigest(binding
|
|
967
|
+
localChanged: localDigest !== publicationSourceDigest(expectedLocalDigest(binding), binding),
|
|
785
968
|
localMissing: localDigest === null,
|
|
786
969
|
remoteChanged: remoteHeadRevisionId !== binding.revisionId,
|
|
787
970
|
},
|
|
@@ -917,9 +1100,54 @@ export async function previewCompanyProposal(root, bindingId, proposalId) {
|
|
|
917
1100
|
if (status.status !== 'synchronized')
|
|
918
1101
|
return fail('E_COMPANY_CONFLICT', 'Local or remote content changed. Compare revisions before applying.');
|
|
919
1102
|
const content = await readArtifactFile(await safeFile(root, binding.filePath));
|
|
920
|
-
if (hash(content) !== binding
|
|
1103
|
+
if (hash(content) !== expectedLocalDigest(binding))
|
|
921
1104
|
return fail('E_COMPANY_CONFLICT', 'The local file changed while preparing the preview. Compare revisions before applying.');
|
|
922
1105
|
const original = JSON.parse(content);
|
|
1106
|
+
if (original?.kind === 'diagram-authoring-bundle') {
|
|
1107
|
+
await assertCompleteDiagramBundle(original, binding.filePath);
|
|
1108
|
+
const replacement = Array.isArray(proposal.operations) && proposal.operations.length === 1
|
|
1109
|
+
? proposal.operations[0]
|
|
1110
|
+
: null;
|
|
1111
|
+
if (replacement?.op !== 'replace-document')
|
|
1112
|
+
return fail('E_COMPANY_AUTHORING', 'Complete diagram bundles require one reviewed successor bundle proposal.');
|
|
1113
|
+
const successor = replacement.content;
|
|
1114
|
+
await assertCompleteDiagramBundle(successor, binding.filePath);
|
|
1115
|
+
const runtime = await diagramAuthoringRuntime();
|
|
1116
|
+
const diff = runtime.diffDiagramBundles(original, successor);
|
|
1117
|
+
if (!diff.ok)
|
|
1118
|
+
return fail('E_COMPANY_AUTHORING', 'The successor bundle could not be compared with its exact base.');
|
|
1119
|
+
const baseLayout = await loadLayout(root, bindingId);
|
|
1120
|
+
if (Object.keys(baseLayout).length)
|
|
1121
|
+
return fail('E_COMPANY_AUTHORING', 'An authored bundle cannot carry a separate legacy layout.');
|
|
1122
|
+
const rendered = JSON.stringify(successor, null, 2) + '\n';
|
|
1123
|
+
if (Buffer.byteLength(rendered) > MAX_BYTES)
|
|
1124
|
+
return fail('E_COMPANY_SIZE', 'The proposed bundle exceeds the 1 MiB company limit.');
|
|
1125
|
+
checkContent(rendered);
|
|
1126
|
+
return {
|
|
1127
|
+
ok: true,
|
|
1128
|
+
action: 'company.proposal-preview',
|
|
1129
|
+
bindingId,
|
|
1130
|
+
proposalId,
|
|
1131
|
+
summary: proposal.summary,
|
|
1132
|
+
filePath: binding.filePath,
|
|
1133
|
+
baseRevisionId: binding.revisionId,
|
|
1134
|
+
baseDigest: expectedLocalDigest(binding),
|
|
1135
|
+
baseLayoutDigest: layoutDigest(baseLayout),
|
|
1136
|
+
document: successor,
|
|
1137
|
+
layout: baseLayout,
|
|
1138
|
+
semanticChanged: hash(rendered) !== expectedLocalDigest(binding),
|
|
1139
|
+
layoutChanged: false,
|
|
1140
|
+
changes: {
|
|
1141
|
+
semantic: diff.semantic,
|
|
1142
|
+
presentation: diff.presentation,
|
|
1143
|
+
source: {
|
|
1144
|
+
originalBytesChanged: original.originalSource?.sourceDigest !== successor.originalSource?.sourceDigest,
|
|
1145
|
+
correspondenceChanged: hash(JSON.stringify(original.sourceMap)) !== hash(JSON.stringify(successor.sourceMap)),
|
|
1146
|
+
},
|
|
1147
|
+
},
|
|
1148
|
+
before: original,
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
923
1151
|
if (original.kind !== 'planr-diagram')
|
|
924
1152
|
return fail('E_COMPANY_AUTHORING', 'This document type does not yet support validated semantic application.');
|
|
925
1153
|
const baseLayout = await loadLayout(root, bindingId);
|
|
@@ -947,7 +1175,7 @@ export async function previewCompanyProposal(root, bindingId, proposalId) {
|
|
|
947
1175
|
summary: proposal.summary,
|
|
948
1176
|
filePath: binding.filePath,
|
|
949
1177
|
baseRevisionId: binding.revisionId,
|
|
950
|
-
baseDigest: binding
|
|
1178
|
+
baseDigest: expectedLocalDigest(binding),
|
|
951
1179
|
baseLayoutDigest: layoutDigest(baseLayout),
|
|
952
1180
|
document,
|
|
953
1181
|
layout: transformed.layout ?? {},
|
|
@@ -994,7 +1222,7 @@ async function resumePendingApplication(root, binding, pending) {
|
|
|
994
1222
|
pending.projectId !== binding.projectId ||
|
|
995
1223
|
pending.artifactId !== binding.artifactId ||
|
|
996
1224
|
pending.baseRevisionId !== binding.revisionId ||
|
|
997
|
-
pending.baseDigest !== binding
|
|
1225
|
+
pending.baseDigest !== expectedLocalDigest(binding) ||
|
|
998
1226
|
!isDigest(pending.baseDigest) ||
|
|
999
1227
|
!isDigest(pending.resultDigest) ||
|
|
1000
1228
|
!isDigest(pending.baseLayoutDigest) ||
|
|
@@ -1015,6 +1243,23 @@ async function resumePendingApplication(root, binding, pending) {
|
|
|
1015
1243
|
pending.semanticChanged !== (pending.baseDigest !== pending.resultDigest) ||
|
|
1016
1244
|
pending.layoutChanged !== (pending.baseLayoutDigest !== pending.resultLayoutDigest))
|
|
1017
1245
|
return fail('E_COMPANY_STATE', 'Pending application content failed its digest check.');
|
|
1246
|
+
const original = JSON.parse(backup);
|
|
1247
|
+
const authored = original?.kind === 'diagram-authoring-bundle';
|
|
1248
|
+
if (authored) {
|
|
1249
|
+
await assertCompleteDiagramBundle(original, binding.filePath);
|
|
1250
|
+
const successor = JSON.parse(staged);
|
|
1251
|
+
await assertCompleteDiagramBundle(successor, binding.filePath);
|
|
1252
|
+
if (pending.layoutChanged)
|
|
1253
|
+
return fail('E_COMPANY_AUTHORING', 'A complete bundle cannot apply a separate layout.');
|
|
1254
|
+
await commitReviewedDiagramSuccessor(root, binding.filePath, successor, `company-${hash(`${binding.id}:${pending.proposalId}`).slice(0, 40)}`, {
|
|
1255
|
+
byteDigest: `sha256:${pending.baseDigest}`,
|
|
1256
|
+
basis: {
|
|
1257
|
+
bundleDigest: original.bundleDigest,
|
|
1258
|
+
semanticDigest: original.document.documentDigest,
|
|
1259
|
+
presentationDigest: original.presentation.presentationDigest,
|
|
1260
|
+
},
|
|
1261
|
+
});
|
|
1262
|
+
}
|
|
1018
1263
|
const inspect = async () => {
|
|
1019
1264
|
const sourceDigest = hash(await readArtifactFile(await safeFile(root, binding.filePath)));
|
|
1020
1265
|
const currentLayoutDigest = layoutDigest(await loadLayout(root, binding.id));
|
|
@@ -1029,6 +1274,8 @@ async function resumePendingApplication(root, binding, pending) {
|
|
|
1029
1274
|
};
|
|
1030
1275
|
let state = await inspect();
|
|
1031
1276
|
if (state.sourceDigest !== pending.resultDigest) {
|
|
1277
|
+
if (authored)
|
|
1278
|
+
return fail('E_COMPANY_CONFLICT', 'The reviewed complete bundle was not committed by the authoring store.');
|
|
1032
1279
|
const target = await safeFile(root, binding.filePath);
|
|
1033
1280
|
await replaceDurably(target, staged, (await lstat(target)).mode & 0o777, async () => {
|
|
1034
1281
|
const latest = await inspect();
|
|
@@ -1181,6 +1428,7 @@ export async function previewCompanyPush(root, bindingId) {
|
|
|
1181
1428
|
...binding,
|
|
1182
1429
|
...source,
|
|
1183
1430
|
contentDigest: hash(content),
|
|
1431
|
+
localContentDigest: hash(content),
|
|
1184
1432
|
byteLength: Buffer.byteLength(content),
|
|
1185
1433
|
createdAt: new Date().toISOString(),
|
|
1186
1434
|
operationId: randomUUID(),
|
|
@@ -1189,7 +1437,8 @@ export async function previewCompanyPush(root, bindingId) {
|
|
|
1189
1437
|
return {
|
|
1190
1438
|
ok: true,
|
|
1191
1439
|
action: 'company.push-preview',
|
|
1192
|
-
status: preview.contentDigest === binding
|
|
1440
|
+
status: preview.contentDigest === expectedLocalDigest(binding) &&
|
|
1441
|
+
sameSourceManifest(binding, prepared)
|
|
1193
1442
|
? 'unchanged'
|
|
1194
1443
|
: 'preview',
|
|
1195
1444
|
bindingId,
|
|
@@ -1244,7 +1493,7 @@ export async function pushCompanyBinding(root, bindingId) {
|
|
|
1244
1493
|
};
|
|
1245
1494
|
if (preview.revisionId !== binding.revisionId)
|
|
1246
1495
|
return fail('E_COMPANY_CONFLICT', 'The binding changed after this preview. Review a new update preview.');
|
|
1247
|
-
if (preview.contentDigest === binding
|
|
1496
|
+
if (preview.contentDigest === expectedLocalDigest(binding)) {
|
|
1248
1497
|
// A reviewed source-only change (for example JSON whitespace) needs no new hosted
|
|
1249
1498
|
// revision, but its exact local source manifest becomes the accepted baseline.
|
|
1250
1499
|
await saveState(root, 'bindings', bindingId, {
|