dsh-archify-projects 0.0.0-stage → 0.1.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/README.md +204 -2
- package/cordis.patch.yml +99 -0
- package/dist/client.js +2261 -0
- package/dist/client.js.map +1 -0
- package/docs/CONTAINER.md +197 -0
- package/docs/DESIGN.md +905 -0
- package/docs/HANDOVER.md +391 -0
- package/docs/PUBLISH.md +107 -0
- package/icon.svg +12 -0
- package/lib/host/archify-skill.js +116 -0
- package/lib/host/archify-skill.js.map +1 -0
- package/lib/host/config.js +95 -0
- package/lib/host/config.js.map +1 -0
- package/lib/host/context.js +28 -0
- package/lib/host/context.js.map +1 -0
- package/lib/host/git.js +185 -0
- package/lib/host/git.js.map +1 -0
- package/lib/host/http.js +184 -0
- package/lib/host/http.js.map +1 -0
- package/lib/host/index.js +90 -0
- package/lib/host/index.js.map +1 -0
- package/lib/host/policy.js +124 -0
- package/lib/host/policy.js.map +1 -0
- package/lib/host/routes.js +667 -0
- package/lib/host/routes.js.map +1 -0
- package/lib/host/runner.js +913 -0
- package/lib/host/runner.js.map +1 -0
- package/lib/host/store.js +370 -0
- package/lib/host/store.js.map +1 -0
- package/lib/host/workspace.js +65 -0
- package/lib/host/workspace.js.map +1 -0
- package/lib/shared/format.js +138 -0
- package/lib/shared/format.js.map +1 -0
- package/lib/shared/prompt.js +257 -0
- package/lib/shared/prompt.js.map +1 -0
- package/lib/shared/protocol.js +31 -0
- package/lib/shared/protocol.js.map +1 -0
- package/lib/shared/types.js +173 -0
- package/lib/shared/types.js.map +1 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +98 -4
- package/skills/archify/LICENSE +22 -0
- package/skills/archify/SKILL.md +109 -0
- package/skills/archify/THIRD_PARTY_NOTICES.md +69 -0
- package/skills/archify/assets/JetBrainsMono-OFL.txt +93 -0
- package/skills/archify/assets/template.html +13709 -0
- package/skills/archify/bin/archify.mjs +6936 -0
- package/skills/archify/bin/delivery-update.mjs +91 -0
- package/skills/archify/bin/finalize.mjs +895 -0
- package/skills/archify/bin/open-artifact.mjs +146 -0
- package/skills/archify/bin/preview.mjs +969 -0
- package/skills/archify/bin/recover-output.mjs +41 -0
- package/skills/archify/bin/visual-check.mjs +2667 -0
- package/skills/archify/brand-marks/README.md +31 -0
- package/skills/archify/brand-marks/catalog.json +131 -0
- package/skills/archify/delta/architecture-delta.mjs +1313 -0
- package/skills/archify/examples/agent-run.lifecycle.json +55 -0
- package/skills/archify/examples/agent-tool-call.workflow.json +74 -0
- package/skills/archify/examples/async-job-roundtrip.sequence.json +56 -0
- package/skills/archify/examples/brand-aware-delivery.architecture.json +34 -0
- package/skills/archify/examples/cache-miss-request.sequence.json +77 -0
- package/skills/archify/examples/checkout-platform.base.architecture.json +32 -0
- package/skills/archify/examples/checkout-platform.head.architecture.json +32 -0
- package/skills/archify/examples/dataflow-product-analytics.html +13820 -0
- package/skills/archify/examples/deployment-release.lifecycle.json +48 -0
- package/skills/archify/examples/event-stream.dataflow.json +52 -0
- package/skills/archify/examples/holiday-planning.workflow.json +143 -0
- package/skills/archify/examples/incident-response.workflow.json +59 -0
- package/skills/archify/examples/lifecycle-agent-run.html +13765 -0
- package/skills/archify/examples/locales/de.json +425 -0
- package/skills/archify/examples/locales/es.json +440 -0
- package/skills/archify/examples/locales/fr.json +425 -0
- package/skills/archify/examples/locales/fr.partial.json +22 -0
- package/skills/archify/examples/locales/it.json +425 -0
- package/skills/archify/examples/locales/ja.json +425 -0
- package/skills/archify/examples/locales/ko.json +440 -0
- package/skills/archify/examples/locales/pt.json +425 -0
- package/skills/archify/examples/locales/ru.json +425 -0
- package/skills/archify/examples/product-analytics.dataflow.json +71 -0
- package/skills/archify/examples/production-deployment.architecture.json +51 -0
- package/skills/archify/examples/release-delivery.workflow.json +57 -0
- package/skills/archify/examples/sequence-cache-miss-request.html +13835 -0
- package/skills/archify/examples/web-app-rendered.html +13808 -0
- package/skills/archify/examples/web-app.architecture.json +41 -0
- package/skills/archify/examples/workflow-agent-tool-call-rendered.html +13826 -0
- package/skills/archify/migrations/workflow-v2.mjs +280 -0
- package/skills/archify/package.json +17 -0
- package/skills/archify/recipes/scenarios.mjs +430 -0
- package/skills/archify/references/architecture-layout-repair.md +18 -0
- package/skills/archify/references/authoring-contract.md +419 -0
- package/skills/archify/references/authoring-defaults.md +41 -0
- package/skills/archify/references/brand-marks.md +82 -0
- package/skills/archify/references/delivery-contract.md +588 -0
- package/skills/archify/references/repository-authoring.md +105 -0
- package/skills/archify/references/update-awareness.md +12 -0
- package/skills/archify/references/viewer-runtime.md +35 -0
- package/skills/archify/renderers/architecture/grid.mjs +62 -0
- package/skills/archify/renderers/architecture/labels.mjs +215 -0
- package/skills/archify/renderers/architecture/render-architecture.mjs +1001 -0
- package/skills/archify/renderers/architecture/routing.mjs +1157 -0
- package/skills/archify/renderers/dataflow/README.md +105 -0
- package/skills/archify/renderers/dataflow/render-dataflow.mjs +544 -0
- package/skills/archify/renderers/lifecycle/README.md +171 -0
- package/skills/archify/renderers/lifecycle/grid-routing.mjs +429 -0
- package/skills/archify/renderers/lifecycle/render-lifecycle.mjs +938 -0
- package/skills/archify/renderers/sequence/README.md +129 -0
- package/skills/archify/renderers/sequence/render-sequence.mjs +526 -0
- package/skills/archify/renderers/shared/atomic-output.mjs +1982 -0
- package/skills/archify/renderers/shared/brand-marks.mjs +670 -0
- package/skills/archify/renderers/shared/cli.mjs +451 -0
- package/skills/archify/renderers/shared/desktop-readability.mjs +132 -0
- package/skills/archify/renderers/shared/diagnostics.mjs +173 -0
- package/skills/archify/renderers/shared/engineering-profiles.mjs +157 -0
- package/skills/archify/renderers/shared/generated-brand-marks.mjs +2003 -0
- package/skills/archify/renderers/shared/generated-validators.mjs +134 -0
- package/skills/archify/renderers/shared/geometry.mjs +1941 -0
- package/skills/archify/renderers/shared/i18n.mjs +603 -0
- package/skills/archify/renderers/shared/layout-report.mjs +42 -0
- package/skills/archify/renderers/shared/legend.mjs +217 -0
- package/skills/archify/renderers/shared/output-path.mjs +440 -0
- package/skills/archify/renderers/shared/path-semantics.mjs +1017 -0
- package/skills/archify/renderers/shared/portable-path.mjs +408 -0
- package/skills/archify/renderers/shared/repository-evidence.mjs +352 -0
- package/skills/archify/renderers/shared/repository-location.mjs +59 -0
- package/skills/archify/renderers/shared/route-quality.mjs +614 -0
- package/skills/archify/renderers/shared/sidecar-path.mjs +38 -0
- package/skills/archify/renderers/shared/spatial-grid.mjs +66 -0
- package/skills/archify/renderers/shared/text-fit.mjs +105 -0
- package/skills/archify/renderers/shared/utils.mjs +254 -0
- package/skills/archify/renderers/shared/validator.mjs +86 -0
- package/skills/archify/renderers/workflow/README.md +301 -0
- package/skills/archify/renderers/workflow/render-workflow.mjs +37 -0
- package/skills/archify/renderers/workflow/workflow-compiler.mjs +4913 -0
- package/skills/archify/renderers/workflow/workflow-migration-geometry.mjs +144 -0
- package/skills/archify/schemas/README.md +256 -0
- package/skills/archify/schemas/architecture.schema.json +152 -0
- package/skills/archify/schemas/common.schema.json +181 -0
- package/skills/archify/schemas/dataflow.schema.json +254 -0
- package/skills/archify/schemas/lifecycle.schema.json +280 -0
- package/skills/archify/schemas/sequence.schema.json +234 -0
- package/skills/archify/schemas/workflow.schema.json +439 -0
- package/skills/archify/scripts/check-render-output.mjs +1388 -0
- package/skills/archify/scripts/check-update.mjs +1710 -0
- package/skills/archify/scripts/delivery-update-child.mjs +23 -0
- package/skills/archify/scripts/render-examples.mjs +26 -0
- package/skills/archify/scripts/update-contract.mjs +182 -0
- package/skills/archify/skill-release.json +10 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
const OPENERS = {
|
|
5
|
+
darwin: {
|
|
6
|
+
command: 'open',
|
|
7
|
+
method: 'open',
|
|
8
|
+
timeoutMs: 5000,
|
|
9
|
+
args: (target) => [target],
|
|
10
|
+
},
|
|
11
|
+
linux: {
|
|
12
|
+
command: 'xdg-open',
|
|
13
|
+
method: 'xdg-open',
|
|
14
|
+
timeoutMs: 5000,
|
|
15
|
+
args: (target) => [target],
|
|
16
|
+
},
|
|
17
|
+
win32: {
|
|
18
|
+
command: 'powershell.exe',
|
|
19
|
+
method: 'powershell',
|
|
20
|
+
// PowerShell cold starts can approach five seconds on hosted Windows
|
|
21
|
+
// runners. Keep the launch bounded without treating normal startup as a
|
|
22
|
+
// timeout.
|
|
23
|
+
timeoutMs: 15000,
|
|
24
|
+
// Keep the command constant and pass the target through a child-only
|
|
25
|
+
// environment variable. Paths are never interpolated into executable source.
|
|
26
|
+
args: () => [
|
|
27
|
+
'-NoProfile',
|
|
28
|
+
'-NonInteractive',
|
|
29
|
+
'-Command',
|
|
30
|
+
'Start-Process -FilePath $env:ARCHIFY_OPEN_TARGET',
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
function failureDetails(result, opener, timeoutMs) {
|
|
36
|
+
const error = result?.error;
|
|
37
|
+
if (error?.code === 'ENOENT') {
|
|
38
|
+
return {
|
|
39
|
+
code: 'opener/unavailable',
|
|
40
|
+
reason: `Could not find ${opener.command}. Install or enable the platform opener, then open the target manually.`,
|
|
41
|
+
systemCode: 'ENOENT',
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (error?.code === 'ETIMEDOUT') {
|
|
45
|
+
return {
|
|
46
|
+
code: 'opener/timeout',
|
|
47
|
+
reason: `${opener.command} did not finish within ${timeoutMs}ms. Open the target manually or retry when the system is less busy.`,
|
|
48
|
+
systemCode: 'ETIMEDOUT',
|
|
49
|
+
timeoutMs,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
if (error) {
|
|
53
|
+
return {
|
|
54
|
+
code: 'opener/spawn-failed',
|
|
55
|
+
reason: error.message || `${opener.command} could not be started. Open the target manually.`,
|
|
56
|
+
...(error.code ? { systemCode: String(error.code) } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (result?.signal) {
|
|
60
|
+
return {
|
|
61
|
+
code: 'opener/signaled',
|
|
62
|
+
reason: `${opener.command} was terminated by ${result.signal}. Open the target manually.`,
|
|
63
|
+
signal: result.signal,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if (result?.status !== 0) {
|
|
67
|
+
return {
|
|
68
|
+
code: 'opener/nonzero-exit',
|
|
69
|
+
reason: `${opener.command} exited with status ${result?.status ?? 'unknown'}. Open the target manually.`,
|
|
70
|
+
exitCode: result?.status ?? null,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function launchTimeout(value, fallback) {
|
|
77
|
+
return Number.isSafeInteger(value) && value > 0 ? value : fallback;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function launchTarget(target, options = {}) {
|
|
81
|
+
const platform = options.platform || process.platform;
|
|
82
|
+
const opener = OPENERS[platform];
|
|
83
|
+
if (!opener) {
|
|
84
|
+
return {
|
|
85
|
+
requested: true,
|
|
86
|
+
status: 'unsupported',
|
|
87
|
+
target,
|
|
88
|
+
method: null,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const spawn = options.spawn || spawnSync;
|
|
93
|
+
const timeoutMs = launchTimeout(options.timeoutMs, opener.timeoutMs);
|
|
94
|
+
let result;
|
|
95
|
+
try {
|
|
96
|
+
const spawnOptions = {
|
|
97
|
+
encoding: 'utf8',
|
|
98
|
+
shell: false,
|
|
99
|
+
stdio: 'ignore',
|
|
100
|
+
timeout: timeoutMs,
|
|
101
|
+
windowsHide: true,
|
|
102
|
+
};
|
|
103
|
+
if (platform === 'win32') {
|
|
104
|
+
spawnOptions.env = {
|
|
105
|
+
...process.env,
|
|
106
|
+
ARCHIFY_OPEN_TARGET: target,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
result = spawn(opener.command, opener.args(target), spawnOptions);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
result = { error };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const failure = failureDetails(result, opener, timeoutMs);
|
|
115
|
+
let status = 'opened';
|
|
116
|
+
if (failure?.code === 'opener/unavailable') status = 'unsupported';
|
|
117
|
+
else if (failure) status = 'failed';
|
|
118
|
+
|
|
119
|
+
return {
|
|
120
|
+
requested: true,
|
|
121
|
+
status,
|
|
122
|
+
target,
|
|
123
|
+
method: opener.method,
|
|
124
|
+
...(failure ? { failure } : {}),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export function openArtifact(target, options = {}) {
|
|
129
|
+
return launchTarget(path.resolve(target), options);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function openLoopbackUrl(target, options = {}) {
|
|
133
|
+
let url;
|
|
134
|
+
try {
|
|
135
|
+
url = new URL(target);
|
|
136
|
+
} catch {
|
|
137
|
+
throw new TypeError('Preview URL must be a valid loopback HTTP URL.');
|
|
138
|
+
}
|
|
139
|
+
if (url.protocol !== 'http:' || url.hostname !== '127.0.0.1' || !url.port) {
|
|
140
|
+
throw new TypeError('Preview URL must be a loopback URL using http://127.0.0.1:<port>.');
|
|
141
|
+
}
|
|
142
|
+
if (url.username || url.password || url.pathname !== '/' || url.search || url.hash) {
|
|
143
|
+
throw new TypeError('Preview URL must target the loopback preview root.');
|
|
144
|
+
}
|
|
145
|
+
return launchTarget(url.href, options);
|
|
146
|
+
}
|