@aipt/cli 0.1.30 → 0.1.32
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 +1 -1
- package/dist/application-runner.js +174 -174
- package/dist/application.js +1 -1
- package/dist/chunk.js +1 -1
- package/dist/package-releases/aipt--cli/0.1.31/release.json +29 -0
- package/dist/package-releases/aipt--cli/0.1.32/release.json +29 -0
- package/dist/package-releases/aipt--idp-setup/0.1.5/release.json +31 -0
- package/docs/bootstrap.md +1 -1
- package/docs/vibe-coding-guide.md +1 -1
- package/documentation-manifest.json +1 -1
- package/package.json +1 -1
package/dist/application.js
CHANGED
|
@@ -42,7 +42,7 @@ ${r}`;if(n===0){let l=e.source.replace(/\n*$/g,"");return`${l}${l.length===0?"":
|
|
|
42
42
|
`),await c.sync()}finally{await c.close()}return await Ja(`${o}.tmp`,o),await this.resymbolicate(t.releaseId),s}async resymbolicate(t){let r=await Zf(ve.join(this.releases(),t)).catch(()=>[]),n=[];for(let i of r)try{n.push(JSON.parse(await ni(ve.join(this.releases(),t,i),"utf8")))}catch{}for(let i of(await this.all()).filter(a=>a.releaseId===t&&a.state==="map-missing")){let a=!1,o=i.error.frames.map(l=>{let p=n.find(m=>new URL(l.file,"http://local").pathname.endsWith(`/${m.registration.asset}`));if(!p||l.line===void 0||l.column===void 0)return l;try{let m=Xf(new Hf(p.map),{line:l.line,column:Math.max(0,l.column-1)});return m.source===null||m.line===null||m.column===null?l:(a=!0,{...l,source:m.source.replace(/^file:\/\//,""),sourceLine:m.line,sourceColumn:m.column+1})}catch{return l}});if(!a)continue;let s={...i,error:{...i.error,frames:o},state:"symbolicated"},c=ve.join(this.directory(),`${i.eventId}.json`),d=await Ba(`${c}.tmp`,"w",384);try{await d.writeFile(`${E(s)}
|
|
43
43
|
`),await d.sync()}finally{await d.close()}await Ja(`${c}.tmp`,c)}}};var Ue=(e,t,r,n,i)=>({code:e,severity:t,fact:r,message:n,...i===void 0?{}:{action:i}});async function ai(e){if(e.lock.capabilities.length===0||e.lock.capabilities.some(r=>r.evidenceIds.length===0))return[Ue("EVIDENCE_INVALID","critical","evidence","\u5DF2\u9A8C\u8BC1\u9501\u7F3A\u5C11\u5B8C\u6574\u8BC1\u636E\u5F15\u7528\u3002","\u91CD\u65B0\u8FD0\u884C\u9A8C\u8BC1\uFF1B\u82E5\u4E8B\u52A1\u672A\u5B8C\u6210\uFF0C\u5148\u6267\u884C\u5B89\u5168\u6062\u590D\u3002")];for(let r of e.lock.capabilities)for(let n of r.evidenceIds)try{let i=On(JSON.parse(await tm(Zc.join(e.projectRoot,".dyyto","evidence",`${n}.json`),"utf8")));if(i.evidenceId!==n||i.capabilityId!==r.capabilityId||i.capabilityVersion!==r.version||i.capabilityIntegrity!==r.integrity||i.projectStateDigest!==r.projectStateDigest||i.result!=="passed")return[Ue("EVIDENCE_INVALID","critical","evidence","\u91C7\u7528\u8BC1\u636E\u4E0E\u5DF2\u9A8C\u8BC1\u9501\u7684\u8EAB\u4EFD\u6216\u5DE5\u7A0B\u72B6\u6001\u4E0D\u4E00\u81F4\u3002","\u91CD\u65B0\u8FD0\u884C\u9A8C\u8BC1\uFF1B\u82E5\u73B0\u573A\u5DF2\u53D8\u5316\uFF0C\u5148\u68C0\u67E5\u5E76\u91CD\u65B0\u89C4\u5212\u3002")]}catch{return[Ue("EVIDENCE_INVALID","critical","evidence","\u91C7\u7528\u8BC1\u636E\u7F3A\u5931\u3001\u635F\u574F\u6216\u4E0D\u7B26\u5408\u5951\u7EA6\u3002","\u91CD\u65B0\u8FD0\u884C\u9A8C\u8BC1\uFF1B\u82E5\u4E8B\u52A1\u672A\u5B8C\u6210\uFF0C\u5148\u6267\u884C\u5B89\u5168\u6062\u590D\u3002")]}let t=e.lock.capabilities.reduce((r,n)=>r+n.evidenceIds.length,0);return[Ue("EVIDENCE_VALID","info","evidence",`\u5DF2\u6838\u9A8C ${e.lock.capabilities.length} \u9879\u80FD\u529B\u7684 ${t} \u6761\u91C7\u7528\u8BC1\u636E\u3002`)]}function Qc(e){return e==="adopted"?[]:e==="planned"?[Ue("ADOPTION_PLANNED","warning","lock","\u80FD\u529B\u91C7\u7528\u4ECD\u5904\u4E8E\u8BA1\u5212\u9636\u6BB5\u3002","\u5BA1\u9605\u5E76\u6279\u51C6\u7CBE\u786E Plan\u3002")]:e==="applied-unverified"?[Ue("VERIFICATION_REQUIRED","warning","evidence","\u53D8\u66F4\u5DF2\u5E94\u7528\u4F46\u5C1A\u672A\u5F62\u6210\u9A8C\u8BC1\u8BC1\u636E\u3002","\u8FD0\u884C\u9A8C\u8BC1\u5E76\u63D0\u4EA4\u91C7\u7528\u9501\u3002")]:e==="drifted"?[Ue("REPOSITORY_DRIFT","warning","repository","\u5DE5\u7A0B\u73B0\u573A\u4E0E\u5DF2\u9501\u5B9A\u4E8B\u5B9E\u4E0D\u4E00\u81F4\u3002","\u68C0\u67E5\u5DEE\u5F02\u5E76\u91CD\u65B0\u89C4\u5212\uFF0C\u5E73\u53F0\u4E0D\u4F1A\u8986\u76D6\u7528\u6237\u4FEE\u6539\u3002")]:e==="recovery-required"?[Ue("RECOVERY_REQUIRED","critical","recovery","\u68C0\u6D4B\u5230\u672A\u5B8C\u6210\u7684\u6301\u4E45\u5316\u4E8B\u52A1\u3002","\u5148\u6267\u884C\u5B89\u5168\u6062\u590D\uFF0C\u518D\u7EE7\u7EED\u5176\u4ED6\u64CD\u4F5C\u3002")]:[Ue("FACT_INVALID","critical","manifest","\u5DE5\u7A0B\u5355\u5143\u4E8B\u5B9E\u65E0\u6CD5\u5B89\u5168\u8BFB\u53D6\u3002","\u4FEE\u590D\u8BE5\u5355\u5143\u7684 Manifest \u6216\u5143\u6570\u636E\u540E\u91CD\u65B0\u8BCA\u65AD\u3002")]}async function rm(e){try{let r=JSON.parse(await tm(Zc.join(e.workspaceRoot,".dyyto","observability","config.json"),"utf8"));if(!Array.isArray(r.applications)||!r.applications.includes(e.applicationId))return[Ue("OBSERVABILITY_NOT_CONFIGURED","warning","repository","\u5F53\u524D Web \u5E94\u7528\u5C1A\u672A\u914D\u7F6E\u8FD0\u884C\u65F6\u9519\u8BEF\u91C7\u96C6\u3002","\u767B\u8BB0\u5E94\u7528 Origin\uFF0C\u5E76\u542F\u52A8\u672C\u5730\u91C7\u96C6\u7AEF\u3002")]}catch{return[Ue("OBSERVABILITY_NOT_CONFIGURED","warning","repository","\u5F53\u524D Web \u5E94\u7528\u5C1A\u672A\u914D\u7F6E\u8FD0\u884C\u65F6\u9519\u8BEF\u91C7\u96C6\u3002","\u767B\u8BB0\u5E94\u7528 Origin\uFF0C\u5E76\u542F\u52A8\u672C\u5730\u91C7\u96C6\u7AEF\u3002")]}await new wr(e.workspaceRoot).list({applicationId:e.applicationId});let t=(await kE(Zc.join(e.workspaceRoot,".dyyto","observability","quarantine")).catch(()=>[])).length;return t>0?[Ue("OBSERVABILITY_STORE_DAMAGED","critical","repository",`\u8FD0\u884C\u65F6\u9519\u8BEF\u672C\u5730\u5B58\u50A8\u5DF2\u9694\u79BB ${t} \u6761\u635F\u574F\u8BB0\u5F55\uFF0C\u5065\u5EB7\u4E8B\u4EF6\u4ECD\u53EF\u67E5\u8BE2\u3002`,"\u68C0\u67E5\u672C\u673A\u78C1\u76D8\u72B6\u6001\uFF0C\u5E76\u663E\u5F0F\u5904\u7406\u9694\u79BB\u8BB0\u5F55\u3002")]:[Ue("OBSERVABILITY_CONFIGURED","info","repository","\u8FD0\u884C\u65F6\u9519\u8BEF\u91C7\u96C6\u914D\u7F6E\u4E0E\u672C\u5730\u5B58\u50A8\u53EF\u8BFB\u53D6\u3002")]}function nm(e){let t=e.units.map(n=>{let i=n.findings.some(a=>a.severity==="critical")?"blocked":n.findings.some(a=>a.severity==="warning")?"attention":"healthy";return{...n,status:i}}),r={total:t.length,healthy:t.filter(n=>n.status==="healthy").length,attention:t.filter(n=>n.status==="attention").length,blocked:t.filter(n=>n.status==="blocked").length};return{schemaVersion:1,workspace:e.workspace,generatedAt:e.generatedAt,status:r.blocked>0?"blocked":r.attention>0?"attention":"healthy",summary:r,units:t}}import{readFile as oi,realpath as im}from"node:fs/promises";import vr from"node:path";var ae=class extends Error{code;constructor(t,r){super(r),this.code=t}};async function am(e){let t=await im(vr.resolve(e.projectRoot)),r=J(e.manifest),n=e.release.release,i=e.currentLock.capabilities.find(m=>m.capabilityId===n.capabilityId&&m.version===n.version);if(!i||i.packageAdoption!==void 0)throw new ae("CAPABILITY_RELEASE_VERSION_UNSUPPORTED","Asset-only removal requires an adopted Capability without package ownership");let a=J({...r,capabilities:r.capabilities.filter(m=>m.capabilityId!==n.capabilityId)}),o=Buffer.from(`${JSON.stringify(a,null,2)}
|
|
44
44
|
`),s=await si(t,"project-capabilities.json");if(!s.exists||s.digest===void 0)throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","Project manifest is unavailable");let c=[{path:"project-capabilities.json",kind:"replace",ownership:"owned-file",baseDigest:s.digest,desiredDigest:v(o)},...i.assets.map(m=>({path:m.path,kind:"remove",ownership:m.ownership??"owned-file",baseDigest:m.digest}))],d=await Promise.all(c.map(m=>si(t,m.path))),l={schemaVersion:1,capabilityId:n.capabilityId,version:n.version,integrity:n.integrity,assets:i.assets.map(m=>({path:m.path,ownership:m.ownership??"owned-file",desiredDigest:m.digest})),verifiers:n.verifiers.map(m=>({id:m.id,kind:"file-digest"}))};return{plan:De({action:"remove",capability:l,changes:c,observedAssets:d,generatedAt:e.generatedAt,expiresAt:e.expiresAt}),manifest:a,desiredContents:new Map([["project-capabilities.json",o]]),transactionRoot:t,removedSources:[]}}async function si(e,t){try{let r=await oi(vr.join(e,...t.split("/")));return{path:t,exists:!0,digest:v(r)}}catch(r){if(r.code==="ENOENT")return{path:t,exists:!1};throw r}}async function el(e){if(e.release.release.schemaVersion===2&&e.release.release.packageSources.length>0&&e.packageSource===void 0)throw new ae("CAPABILITY_RELEASE_VERSION_UNSUPPORTED","Capability Release v2 requires verified package source facts");let t=await im(vr.resolve(e.projectRoot)),r=J(e.manifest),n=e.release.release,i=e.packageSource?.topology,a=i?.transactionRoot??t,o=k=>i?.mode==="pnpm-shared-lockfile"?`${i.unitRelativeRoot}/${k}`:k;if(n.kind!=="engineering-feature"||n.consumerProfile!=="any-project")throw new ae("CAPABILITY_KIND_UNSUPPORTED","Only an addable engineering feature can use this lifecycle");if(r.capabilities.some(k=>k.capabilityId===n.capabilityId))throw new ae("CAPABILITY_ALREADY_SELECTED","The capability is already selected by this project");let s=r.profile?.id,c=s==="typescript-library"?"blank-typescript-library":s,d=n.dependencies?.profiles??[],l=e.currentLock.capabilities.find(k=>k.consumerProfile===c);if(c===void 0||!d.includes(c)||l===void 0)throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","The project profile does not satisfy this capability dependency");if((n.dependencies?.capabilities??[]).some(k=>!r.capabilities.some(S=>S.capabilityId===k)||!e.currentLock.capabilities.some(S=>S.capabilityId===k)))throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","A required project capability is not adopted and verified");let m=J({...r,capabilities:[...r.capabilities,{capabilityId:n.capabilityId,version:n.version}]}),u=o("project-capabilities.json"),f=Buffer.from(`${JSON.stringify(m,null,2)}
|
|
45
|
-
`),g=await si(a,u);if(!g.exists||g.digest===void 0)throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","The project manifest is unavailable");let h=[{path:u,kind:"replace",ownership:"owned-file",baseDigest:g.digest,desiredDigest:v(f)}],w=new Map([[u,f]]),_;if(n.schemaVersion===2&&n.packageSources.length>0){if(e.packageSource===void 0)throw new ae("CAPABILITY_RELEASE_VERSION_UNSUPPORTED","Capability Release v2 requires verified package source facts");let k;try{k=await oi(vr.join(t,"package.json"))}catch{throw new ae("CAPABILITY_PACKAGE_SOURCE_INVALID","\u9879\u76EE package.json \u4E0D\u53EF\u7528\uFF0C\u65E0\u6CD5\u751F\u6210\u5305\u91C7\u7528\u8BA1\u5212")}try{let S=e.packageSource.currentLockfile??await oi(vr.join(t,"pnpm-lock.yaml")).catch(ne=>ne.code==="ENOENT"?void 0:Promise.reject(ne)),O=e.packageSource.topology??{schemaVersion:1,mode:"standalone",transactionRoot:t,unitRoot:t,unitRelativeRoot:".",unitImporterId:".",lockfilePath:"pnpm-lock.yaml"},se=O.mode==="pnpm-shared-lockfile",$={mode:O.mode,unitRelativeRoot:O.unitRelativeRoot,unitImporterId:O.unitImporterId,lockfilePath:O.lockfilePath,...O.workspaceManifestPath?{workspaceManifestPath:O.workspaceManifestPath,workspaceManifestDigest:O.workspaceManifestDigest}:{}},P={registryConfigs:e.packageSource.registryConfigs,endpointBindings:e.packageSource.endpointBindings,receipts:e.packageSource.receipts,inspections:e.packageSource.inspections};if(se&&(!e.packageSource.resolutionEvidence||!e.packageSource.resolutionWorkerReleaseId))throw new H("PACKAGE_SOURCE_POLICY_VIOLATION");let Y=se?(e.packageChannel==="development"?ja:Sa)({release:n,...P,consumerProfile:c,packageJson:k,currentLockfile:S,generatedAt:e.generatedAt,expiresAt:e.expiresAt,topology:$,preservedImporterDigests:e.packageSource.preservedImporterDigests??[],resolutionEvidence:e.packageSource.resolutionEvidence,resolutionWorkerReleaseId:e.packageSource.resolutionWorkerReleaseId}):(e.packageChannel==="development"?Da:Na)({release:n,...P,lockResolution:e.packageSource.lockResolution,consumerProfile:c,packageJson:k,...S===void 0?{}:{currentLockfile:S},generatedAt:e.generatedAt,expiresAt:e.expiresAt});_=Aa(Y),h.push({path:o("package.json"),kind:"replace",ownership:"owned-file",baseDigest:Y.packageJsonPreimageDigest,desiredDigest:Y.desiredPackageJsonDigest}),w.set(o("package.json"),Y.desiredPackageJson),h.push({path:O.lockfilePath,kind:S===void 0?"create":"replace",ownership:"owned-file",...S===void 0?{}:{baseDigest:v(S)},desiredDigest:Y.desiredLockfileDigest}),w.set(O.lockfilePath,Y.desiredLockfile)}catch(S){throw S instanceof H?new ae("CAPABILITY_PACKAGE_SOURCE_INVALID",S.code):S}}for(let k of n.assets){let S=e.release.contents.get(k.path);if(S===void 0)throw new ae("CAPABILITY_KIND_UNSUPPORTED","Capability asset content is unavailable");let O=k.renderer==="application-config-contract-v1"?Oa(r):k.renderer==="application-config-binding-v1"?xa(r):S;if(k.ownership==="managed-region"){if(k.regionId===void 0)throw new ae("CAPABILITY_KIND_UNSUPPORTED","Managed region identity is unavailable");let se;try{se=await oi(vr.join(t,...k.path.split("/")))}catch{throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","The managed shared file is unavailable")}let $=Buffer.from(vu({source:se.toString("utf8"),regionId:k.regionId,content:Buffer.from(O).toString("utf8")}));h.push({path:o(k.path),kind:"merge",ownership:"managed-region",regionId:k.regionId,baseDigest:v(se),desiredDigest:v($)}),w.set(o(k.path),$)}else{let se=await si(t,k.path);if(k.ownership==="seed-file"&&se.exists){let $=await oi(vr.join(t,...k.path.split("/")));h.push({path:o(k.path),kind:"create",ownership:"seed-file",desiredDigest:v($)}),w.set(o(k.path),$)}else h.push({path:o(k.path),kind:"create",ownership:k.ownership,desiredDigest:v(O)}),w.set(o(k.path),O)}}let b=await Promise.all(h.map(k=>si(a,k.path))),A={schemaVersion:1,capabilityId:n.capabilityId,version:n.version,integrity:n.integrity,assets:h.filter(k=>k.path!==u&&k.path!==i?.lockfilePath).map(k=>({path:i?.mode==="pnpm-shared-lockfile"?k.path.slice(i.unitRelativeRoot.length+1):k.path,ownership:k.ownership,desiredDigest:k.desiredDigest})),verifiers:n.verifiers.map(k=>({id:k.id,kind:"file-digest"}))};return{plan:De({action:"adopt",capability:A,changes:h,observedAssets:b,generatedAt:e.generatedAt,expiresAt:e.expiresAt,..._===void 0?{}:{packageAdoption:_}}),manifest:m,desiredContents:w,transactionRoot:a,dependency:{profile:c,satisfied:!0}}}var om=br(nr(),1);var _E={$id:"https://schemas.dyyto.dev/platform/solution-catalog-entry-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","solutionId","version","integrity","title","summary","maturity","members","integration","exit"],properties:{schemaVersion:{const:1},solutionId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},summary:{type:"string",minLength:1,maxLength:240},maturity:{enum:["guided","automated"]},members:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["capabilityId","version","role","required"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},role:{type:"string",minLength:1,maxLength:80},required:{type:"boolean"}}}},integration:{type:"object",additionalProperties:!1,required:["prerequisites","steps","verification","result"],properties:{prerequisites:{type:"array",minItems:1,maxItems:16,items:{type:"string",minLength:1,maxLength:200}},steps:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["label","command"],properties:{label:{type:"string",minLength:1,maxLength:80},command:{type:"string",minLength:1,maxLength:2e3}}}},verification:{type:"array",minItems:1,maxItems:32,items:{type:"string",minLength:1,maxLength:1e3}},result:{type:"string",minLength:1,maxLength:400}}},exit:{type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string",minLength:1,maxLength:400}}}}},cD=new om.Ajv2020({allErrors:!0,strict:!0}).compile(_E);var pm=br(nr(),1);import{readFile as EE,realpath as AE}from"node:fs/promises";import sm from"node:path";var cm="^[a-z0-9]+(?:[.-][a-z0-9]+)*$",lm="^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[^\\u0000]+$",RE={$id:"https://schemas.dyyto.dev/platform/example-recipe-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","recipeId","version","integrity","title","locale","rootProfile","capabilities","expectedEntrypoint","verifiers","manualAcceptance","cleanup"],properties:{schemaVersion:{const:1},recipeId:{type:"string",pattern:cm},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},locale:{const:"zh-CN"},rootProfile:{type:"object",additionalProperties:!1,required:["capabilityId","version"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128}}},capabilities:{type:"array",minItems:1,maxItems:16,items:{type:"object",additionalProperties:!1,required:["capabilityId","version","channel"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},channel:{const:"development"}}}},expectedEntrypoint:{type:"string",pattern:lm,maxLength:240},verifiers:{type:"array",minItems:1,maxItems:16,uniqueItems:!0,items:{type:"string",pattern:cm}},manualAcceptance:{type:"array",minItems:1,maxItems:32,items:{type:"string",minLength:1,maxLength:240}},cleanup:{type:"object",additionalProperties:!1,required:["ownedStateDirectories"],properties:{ownedStateDirectories:{type:"array",maxItems:8,uniqueItems:!0,items:{type:"string",pattern:lm,maxLength:240}}}}}},dm=new pm.Ajv2020({allErrors:!0,strict:!0}).compile(RE),Ir=class extends Error{code;issues;constructor(t,r=[]){super(t),this.code=t,this.issues=r}};function PE(e){return v(E(e))}function NE(e){if(!dm(e))throw new Ir("EXAMPLE_RECIPE_INVALID",dm.errors??[]);let t=e,r=[t.rootProfile.capabilityId,...t.capabilities.map(n=>n.capabilityId)];if(new Set(r).size!==r.length||t.capabilities.some(n=>n.version.includes("workspace:")||n.capabilityId.includes("ai-education-poc")))throw new Ir("EXAMPLE_RECIPE_INVALID");return t}async function um(e){let t=await AE(sm.resolve(e)),r;try{r=NE(JSON.parse(await EE(sm.join(t,"recipe.json"),"utf8")))}catch(a){throw a instanceof Ir?a:new Ir("EXAMPLE_RECIPE_INVALID")}let{integrity:n,...i}=r;if(PE(i)!==n)throw new Ir("EXAMPLE_RECIPE_INTEGRITY_MISMATCH");return r}var gm=br(nr(),1);import{readFile as DE,realpath as SE}from"node:fs/promises";import fm from"node:path";var jE={$id:"https://schemas.dyyto.dev/platform/engineering-template-release-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","templateId","version","integrity","title","summary","status","profile","parameters","commands","technology","support","integration","metrics"],properties:{schemaVersion:{const:1},templateId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},summary:{type:"string",minLength:1,maxLength:240},status:{enum:["candidate","recommended","deprecated"]},profile:{type:"object",additionalProperties:!1,required:["id","capability"],properties:{id:{type:"string",pattern:Z},capability:{type:"string",pattern:`${Z.slice(1,-1)}@[0-9]+\\.[0-9]+\\.[0-9]+$`}}},parameters:{type:"array",minItems:0,maxItems:32,items:{type:"object",additionalProperties:!1,required:["id","required","description"],properties:{id:{type:"string",pattern:"^[a-z][A-Za-z0-9]*$"},required:{type:"boolean"},description:{type:"string",minLength:1,maxLength:160}}}},commands:{type:"object",minProperties:1,additionalProperties:!1,properties:{dev:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},build:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},test:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},package:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"}}},technology:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["id","version","policy","verifiedAt","rationale","alternative","exit"],properties:{id:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:64},policy:{enum:["recommended","allowed"]},verifiedAt:{type:"string",format:"date"},rationale:{type:"string",minLength:1,maxLength:240},alternative:{type:"string",minLength:1,maxLength:160},exit:{type:"string",minLength:1,maxLength:240}}}},support:{type:"object",additionalProperties:!1,required:["owner","tier","supportedFrom","supportedUntil","upgradeCadence","eolNoticeDays"],properties:{owner:{type:"string",pattern:Z},tier:{const:"production"},supportedFrom:{type:"string",format:"date"},supportedUntil:{type:"string",format:"date"},upgradeCadence:{type:"string",minLength:1,maxLength:80},eolNoticeDays:{type:"integer",minimum:30,maximum:730}}},integration:{type:"object",additionalProperties:!1,required:["prerequisites","createCommand","result"],properties:{prerequisites:{type:"array",minItems:1,maxItems:16,items:{type:"string",minLength:1,maxLength:200}},createCommand:{type:"string",minLength:1,maxLength:2e3},result:{type:"string",minLength:1,maxLength:400}}},metrics:{type:"array",minItems:1,uniqueItems:!0,items:{enum:["time-to-green-build","time-to-first-business-commit","manual-engineering-edits","upgrade-conflicts"]}}}},mm=new gm.Ajv2020({allErrors:!0,strict:!0,formats:{date:/^\d{4}-\d{2}-\d{2}$/}}).compile(jE),Rt=class extends Error{code;issues;constructor(t,r=[]){super(t),this.code=t,this.issues=r}};function $E(e){return v(E(e))}function OE(e){if(!mm(e))throw new Rt("TEMPLATE_INVALID",mm.errors??[]);let t=e;if(new Set(t.parameters.map(r=>r.id)).size!==t.parameters.length||new Set(t.technology.map(r=>r.id)).size!==t.technology.length)throw new Rt("TEMPLATE_INVALID");if(Date.parse(t.support.supportedUntil)<=Date.parse(t.support.supportedFrom))throw new Rt("TEMPLATE_INVALID");return t}async function ci(e,t=new Date){let r=await SE(fm.resolve(e)),n;try{n=OE(JSON.parse(await DE(fm.join(r,"template.json"),"utf8")))}catch(o){throw o instanceof Rt?o:new Rt("TEMPLATE_INVALID")}let{integrity:i,...a}=n;if($E(a)!==i)throw new Rt("TEMPLATE_INTEGRITY_MISMATCH");if(n.status==="recommended"&&Date.parse(n.support.supportedUntil)<t.getTime())throw new Rt("TEMPLATE_SUPPORT_EXPIRED");return n}import{readFile as hm}from"node:fs/promises";import ym from"node:path";var CE=/^[A-Z][A-Z0-9_]*$/u,TE=/(?:API_KEY|ACCESS_KEY|SECRET|TOKEN|PASSWORD|PRIVATE_KEY|DATABASE_URL|POSTGRES_URL)$/u;function xE(e){let t=new Map;for(let r of e.split(/\r?\n/u)){let n=/^([A-Z][A-Z0-9_]*)=(.*)$/u.exec(r.trim());if(!n||!CE.test(n[1]))continue;let i=n[1],a=n[2].trim();t.set(i,{name:i,requirement:a.length===0?"conditional":"optional",secret:TE.test(i),configured:!1,source:".env.example",configuredSource:null})}return[...t.values()]}async function wm(e){let t=await hm(ym.join(e.projectRoot,".env.example"),"utf8").then(()=>".env.example").catch(()=>null),r=t?await hm(ym.join(e.projectRoot,t),"utf8"):"",n=await Zn({projectRoot:e.projectRoot}).catch(()=>null);return{commands:["dev","build","test","package"].flatMap(a=>e.commands[a]?[{id:a,script:e.commands[a],mode:a==="dev"?"managed-process":"foreground-task"}]:[]),environment:n?n.entries.map(a=>({name:a.name,requirement:a.required?"conditional":"optional",secret:a.kind!=="value",configured:a.configured,source:"application-config-contract",configuredSource:"APP_CONFIG_DIR",display:a.display,...a.fingerprint?{fingerprint:a.fingerprint}:{}})):xE(r),environmentExample:t,productionValidation:{contract:!0,live:["provider-read","oss-write-read-delete"]}}}var vm={change:new Set(["plan","apply","upgrade","recover","baseline-next","add-package","add-application","add-feature"]),quality:new Set(["inspect","verify","doctor","maintenance","test","build"]),delivery:new Set(["package","delivery-plan","delivery-apply","delivery-inspect"])},Im=new Set(["queued","running","succeeded","failed","outcome-unknown","cancelled"]);function bm(e,t){if(!vm[t.plane]||t.state&&!Im.has(t.state)||t.limit!==void 0&&(!Number.isSafeInteger(t.limit)||t.limit<1||t.limit>200))throw new Error("OPERATION_FILTER_INVALID");let r=vm[t.plane],n=t.from?Date.parse(t.from):null,i=t.to?Date.parse(t.to):null;if(n!==null&&Number.isNaN(n)||i!==null&&Number.isNaN(i)||n!==null&&i!==null&&n>i)throw new Error("OPERATION_FILTER_INVALID");let a=e.filter(d=>r.has(d.operation)),o=[...new Map(a.map(d=>[d.projectId,{id:d.projectId,name:d.projectName}])).values()].sort((d,l)=>d.name.localeCompare(l.name)),s=a.filter(d=>(!t.projectId||d.projectId===t.projectId)&&(!t.state||d.state===t.state)&&(!t.kind||d.operation===t.kind)&&(n===null||Date.parse(d.createdAt)>=n)&&(i===null||Date.parse(d.createdAt)<=i)).sort((d,l)=>l.updatedAt.localeCompare(d.updatedAt)),c={total:s.length,running:s.filter(d=>d.state==="running"||d.state==="queued").length,succeeded:s.filter(d=>d.state==="succeeded").length,attention:s.filter(d=>d.state==="failed"||d.state==="outcome-unknown").length};return Object.freeze({schemaVersion:1,plane:t.plane,summary:Object.freeze(c),facets:Object.freeze({projects:Object.freeze(o),states:Object.freeze([...Im]),kinds:Object.freeze([...r])}),items:Object.freeze(s.slice(0,t.limit??50).map(Object.freeze)),hasMore:s.length>(t.limit??50)})}var li=class extends Error{code;constructor(t,r){super(r),this.code=t}},rl=/^sha256:[a-f0-9]{64}$/u,LE=/^sha512-[A-Za-z0-9+/]{86}==$/u,VE=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u,ME=/^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?$/u,qE=/[\u0000-\u001f\u007f]/u;function Zr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Qr(e,t){let r=Object.keys(e).sort(),n=[...t].sort();return r.length===n.length&&r.every((i,a)=>i===n[a])}function Pt(e,t=500){return typeof e=="string"&&e.length>0&&e.length<=t&&!qE.test(e)}function tl(e){return Pt(e,500)&&!e.startsWith("/")&&!e.startsWith("../")&&!e.includes("/../")&&!e.includes("\\")}function km(e,t=128){return Array.isArray(e)&&e.length<=t&&e.every(r=>Pt(r,500))&&e.every((r,n)=>n===0||e[n-1]<r)}function UE(e){return e===null?!0:!Zr(e)||!Qr(e,["fileName","digest","integrity","fileCount","unpackedBytes"])?!1:tl(e.fileName)&&rl.test(String(e.digest))&&LE.test(String(e.integrity))&&Number.isSafeInteger(e.fileCount)&&Number(e.fileCount)>0&&Number.isSafeInteger(e.unpackedBytes)&&Number(e.unpackedBytes)>0}function FE(e){if(!Zr(e)||!Qr(e,["schemaVersion","kind","packageName","version","title","summary","maturity","source","artifact","compatibility","exports","documentation","consumerEvidence"])||e.schemaVersion!==1||e.kind!=="PackageRelease"||!VE.test(e.packageName)||!ME.test(e.version)||!Pt(e.title,120)||!Pt(e.summary,1e3)||!["candidate","stable","deprecated"].includes(e.maturity)||!Zr(e.source)||!Qr(e.source,["repository","path","revision","treeDigest"])||!Pt(e.source.repository)||!tl(e.source.path)||!Pt(e.source.revision,200)||!rl.test(String(e.source.treeDigest))||!UE(e.artifact)||!Zr(e.compatibility)||!Qr(e.compatibility,["node","packageManager"])||!Pt(e.compatibility.node,100)||!Pt(e.compatibility.packageManager,100)||!km(e.exports)||!km(e.consumerEvidence)||!Zr(e.documentation))return!1;let t=e.documentation.knowledgeRef===void 0?["readme"]:["readme","knowledgeRef"];return!Qr(e.documentation,t)||!tl(e.documentation.readme)||e.documentation.knowledgeRef!==void 0&&!Pt(e.documentation.knowledgeRef,500)?!1:e.artifact!==null||e.maturity!=="stable"}function zE(e){let t={schemaVersion:1,kind:"PackageRelease",...e,source:Object.freeze({...e.source}),artifact:e.artifact===null?null:Object.freeze({...e.artifact}),compatibility:Object.freeze({...e.compatibility}),exports:Object.freeze([...e.exports]),documentation:Object.freeze({...e.documentation}),consumerEvidence:Object.freeze([...e.consumerEvidence])};if(!FE(t))throw new li("PACKAGE_RELEASE_INVALID","PackageRelease \u5185\u5BB9\u65E0\u6548");return Object.freeze({...t,releaseDigest:v(E(t))})}function _m(e){if(!Zr(e)||!Qr(e,["schemaVersion","kind","packageName","version","title","summary","maturity","source","artifact","compatibility","exports","documentation","consumerEvidence","releaseDigest"])||!rl.test(String(e.releaseDigest)))throw new li("PACKAGE_RELEASE_INVALID","PackageRelease \u7ED3\u6784\u65E0\u6548");let{releaseDigest:t,schemaVersion:r,kind:n,...i}=e,a=zE(i);if(a.releaseDigest!==t)throw new li("PACKAGE_RELEASE_MODIFIED","PackageRelease \u5DF2\u88AB\u4FEE\u6539");return a}import{lstat as BE,readFile as JE,realpath as GE}from"node:fs/promises";import Em from"node:path";async function Am(e){let t=await GE(Em.resolve(e.projectRoot)),r=new Set(e.excludeCapabilityIds??[]),n=new Map,i=[...e.lock.capabilities].sort((o,s)=>o.committedAt.localeCompare(s.committedAt)||o.capabilityId.localeCompare(s.capabilityId));for(let o of i)if(!r.has(o.capabilityId))for(let s of o.assets){let c=s.ownership??"owned-file",d=`${s.path}\0`;if(c==="managed-region")n.delete(d);else for(let p of n.keys())p.startsWith(d)&&n.delete(p);let l=c==="managed-region"?`${d}${s.regionId??""}`:d;n.set(l,{capabilityId:o.capabilityId,path:s.path,digest:s.digest,ownership:c,...s.regionId===void 0?{}:{regionId:s.regionId}})}let a=[];for(let o of[...n.values()].sort((s,c)=>s.path.localeCompare(c.path)||(s.regionId??"").localeCompare(c.regionId??"")||s.capabilityId.localeCompare(c.capabilityId))){let s=Em.join(t,...o.path.split("/")),d=await BE(s).then(async l=>{if(!l.isFile()||l.isSymbolicLink())return;let p=await JE(s);if(o.ownership!=="managed-region")return v(p);if(o.regionId!==void 0)try{return v(Qi(p.toString("utf8"),o.regionId))}catch{return}}).catch(l=>l.code==="ENOENT"?void 0:Promise.reject(l))===o.digest;a.push({capabilityId:o.capabilityId,path:o.path,kind:"create",ownership:o.ownership,...o.regionId===void 0?{}:{regionId:o.regionId},desiredDigest:o.digest,disposition:d?"noop":"conflict",...d?{}:{conflictCode:"BASE_DIGEST_MISMATCH"}})}return a}var nl="0.1.30",di={DEPENDENCIES_NOT_INSTALLED:4,VERIFIER_RUNTIME_INVALID:4},WE=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/u;function Rm(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!WE.test(e)}function KE(e){let t={schemaVersion:1,kind:"dyyto-cli-domain-error",code:e.code,message:e.message,exitCode:di[e.code],...e.nextStep===void 0?{}:{nextStep:e.nextStep}},r=YE(t);if(r===null)throw new TypeError("CLI domain error input is invalid");return r}function YE(e){try{if(typeof e!="object"||e===null||Object.getPrototypeOf(e)!==Object.prototype)return null;let t=Object.getOwnPropertyDescriptors(e);if(Reflect.ownKeys(t).some(s=>typeof s=="symbol"))return null;let r=Object.keys(t).sort(),n="nextStep"in t?["code","exitCode","kind","message","nextStep","schemaVersion"]:["code","exitCode","kind","message","schemaVersion"];if(r.length!==n.length||r.some((s,c)=>s!==n[c])||Object.values(t).some(s=>!("value"in s)))return null;let i=s=>t[s]?.value,a=i("code");if(i("schemaVersion")!==1||i("kind")!=="dyyto-cli-domain-error"||typeof a!="string"||!(a in di)||i("exitCode")!==di[a]||!Rm(i("message"),500))return null;let o=i("nextStep");return o!==void 0&&!Rm(o,500)?null:Object.freeze({schemaVersion:1,kind:"dyyto-cli-domain-error",code:a,message:i("message"),exitCode:4,...o===void 0?{}:{nextStep:o}})}catch{return null}}var Te=class extends Error{code;exitCode;nextStep;domainError;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.exitCode=t.exitCode,this.nextStep=t.nextStep,this.domainError=t.code in di&&t.exitCode===di[t.code]?KE({code:t.code,message:t.message,...t.nextStep===void 0?{}:{nextStep:t.nextStep}}):void 0}};var Pm=`Dyyto Engineering Platform CLI
|
|
45
|
+
`),g=await si(a,u);if(!g.exists||g.digest===void 0)throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","The project manifest is unavailable");let h=[{path:u,kind:"replace",ownership:"owned-file",baseDigest:g.digest,desiredDigest:v(f)}],w=new Map([[u,f]]),_;if(n.schemaVersion===2&&n.packageSources.length>0){if(e.packageSource===void 0)throw new ae("CAPABILITY_RELEASE_VERSION_UNSUPPORTED","Capability Release v2 requires verified package source facts");let k;try{k=await oi(vr.join(t,"package.json"))}catch{throw new ae("CAPABILITY_PACKAGE_SOURCE_INVALID","\u9879\u76EE package.json \u4E0D\u53EF\u7528\uFF0C\u65E0\u6CD5\u751F\u6210\u5305\u91C7\u7528\u8BA1\u5212")}try{let S=e.packageSource.currentLockfile??await oi(vr.join(t,"pnpm-lock.yaml")).catch(ne=>ne.code==="ENOENT"?void 0:Promise.reject(ne)),O=e.packageSource.topology??{schemaVersion:1,mode:"standalone",transactionRoot:t,unitRoot:t,unitRelativeRoot:".",unitImporterId:".",lockfilePath:"pnpm-lock.yaml"},se=O.mode==="pnpm-shared-lockfile",$={mode:O.mode,unitRelativeRoot:O.unitRelativeRoot,unitImporterId:O.unitImporterId,lockfilePath:O.lockfilePath,...O.workspaceManifestPath?{workspaceManifestPath:O.workspaceManifestPath,workspaceManifestDigest:O.workspaceManifestDigest}:{}},P={registryConfigs:e.packageSource.registryConfigs,endpointBindings:e.packageSource.endpointBindings,receipts:e.packageSource.receipts,inspections:e.packageSource.inspections};if(se&&(!e.packageSource.resolutionEvidence||!e.packageSource.resolutionWorkerReleaseId))throw new H("PACKAGE_SOURCE_POLICY_VIOLATION");let Y=se?(e.packageChannel==="development"?ja:Sa)({release:n,...P,consumerProfile:c,packageJson:k,currentLockfile:S,generatedAt:e.generatedAt,expiresAt:e.expiresAt,topology:$,preservedImporterDigests:e.packageSource.preservedImporterDigests??[],resolutionEvidence:e.packageSource.resolutionEvidence,resolutionWorkerReleaseId:e.packageSource.resolutionWorkerReleaseId}):(e.packageChannel==="development"?Da:Na)({release:n,...P,lockResolution:e.packageSource.lockResolution,consumerProfile:c,packageJson:k,...S===void 0?{}:{currentLockfile:S},generatedAt:e.generatedAt,expiresAt:e.expiresAt});_=Aa(Y),h.push({path:o("package.json"),kind:"replace",ownership:"owned-file",baseDigest:Y.packageJsonPreimageDigest,desiredDigest:Y.desiredPackageJsonDigest}),w.set(o("package.json"),Y.desiredPackageJson),h.push({path:O.lockfilePath,kind:S===void 0?"create":"replace",ownership:"owned-file",...S===void 0?{}:{baseDigest:v(S)},desiredDigest:Y.desiredLockfileDigest}),w.set(O.lockfilePath,Y.desiredLockfile)}catch(S){throw S instanceof H?new ae("CAPABILITY_PACKAGE_SOURCE_INVALID",S.code):S}}for(let k of n.assets){let S=e.release.contents.get(k.path);if(S===void 0)throw new ae("CAPABILITY_KIND_UNSUPPORTED","Capability asset content is unavailable");let O=k.renderer==="application-config-contract-v1"?Oa(r):k.renderer==="application-config-binding-v1"?xa(r):S;if(k.ownership==="managed-region"){if(k.regionId===void 0)throw new ae("CAPABILITY_KIND_UNSUPPORTED","Managed region identity is unavailable");let se;try{se=await oi(vr.join(t,...k.path.split("/")))}catch{throw new ae("CAPABILITY_DEPENDENCY_UNSATISFIED","The managed shared file is unavailable")}let $=Buffer.from(vu({source:se.toString("utf8"),regionId:k.regionId,content:Buffer.from(O).toString("utf8")}));h.push({path:o(k.path),kind:"merge",ownership:"managed-region",regionId:k.regionId,baseDigest:v(se),desiredDigest:v($)}),w.set(o(k.path),$)}else{let se=await si(t,k.path);if(k.ownership==="seed-file"&&se.exists){let $=await oi(vr.join(t,...k.path.split("/")));h.push({path:o(k.path),kind:"create",ownership:"seed-file",desiredDigest:v($)}),w.set(o(k.path),$)}else h.push({path:o(k.path),kind:"create",ownership:k.ownership,desiredDigest:v(O)}),w.set(o(k.path),O)}}let b=await Promise.all(h.map(k=>si(a,k.path))),A={schemaVersion:1,capabilityId:n.capabilityId,version:n.version,integrity:n.integrity,assets:h.filter(k=>k.path!==u&&k.path!==i?.lockfilePath).map(k=>({path:i?.mode==="pnpm-shared-lockfile"?k.path.slice(i.unitRelativeRoot.length+1):k.path,ownership:k.ownership,desiredDigest:k.desiredDigest})),verifiers:n.verifiers.map(k=>({id:k.id,kind:"file-digest"}))};return{plan:De({action:"adopt",capability:A,changes:h,observedAssets:b,generatedAt:e.generatedAt,expiresAt:e.expiresAt,..._===void 0?{}:{packageAdoption:_}}),manifest:m,desiredContents:w,transactionRoot:a,dependency:{profile:c,satisfied:!0}}}var om=br(nr(),1);var _E={$id:"https://schemas.dyyto.dev/platform/solution-catalog-entry-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","solutionId","version","integrity","title","summary","maturity","members","integration","exit"],properties:{schemaVersion:{const:1},solutionId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},summary:{type:"string",minLength:1,maxLength:240},maturity:{enum:["guided","automated"]},members:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["capabilityId","version","role","required"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},role:{type:"string",minLength:1,maxLength:80},required:{type:"boolean"}}}},integration:{type:"object",additionalProperties:!1,required:["prerequisites","steps","verification","result"],properties:{prerequisites:{type:"array",minItems:1,maxItems:16,items:{type:"string",minLength:1,maxLength:200}},steps:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["label","command"],properties:{label:{type:"string",minLength:1,maxLength:80},command:{type:"string",minLength:1,maxLength:2e3}}}},verification:{type:"array",minItems:1,maxItems:32,items:{type:"string",minLength:1,maxLength:1e3}},result:{type:"string",minLength:1,maxLength:400}}},exit:{type:"object",additionalProperties:!1,required:["summary"],properties:{summary:{type:"string",minLength:1,maxLength:400}}}}},cD=new om.Ajv2020({allErrors:!0,strict:!0}).compile(_E);var pm=br(nr(),1);import{readFile as EE,realpath as AE}from"node:fs/promises";import sm from"node:path";var cm="^[a-z0-9]+(?:[.-][a-z0-9]+)*$",lm="^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[^\\u0000]+$",RE={$id:"https://schemas.dyyto.dev/platform/example-recipe-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","recipeId","version","integrity","title","locale","rootProfile","capabilities","expectedEntrypoint","verifiers","manualAcceptance","cleanup"],properties:{schemaVersion:{const:1},recipeId:{type:"string",pattern:cm},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},locale:{const:"zh-CN"},rootProfile:{type:"object",additionalProperties:!1,required:["capabilityId","version"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128}}},capabilities:{type:"array",minItems:1,maxItems:16,items:{type:"object",additionalProperties:!1,required:["capabilityId","version","channel"],properties:{capabilityId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},channel:{const:"development"}}}},expectedEntrypoint:{type:"string",pattern:lm,maxLength:240},verifiers:{type:"array",minItems:1,maxItems:16,uniqueItems:!0,items:{type:"string",pattern:cm}},manualAcceptance:{type:"array",minItems:1,maxItems:32,items:{type:"string",minLength:1,maxLength:240}},cleanup:{type:"object",additionalProperties:!1,required:["ownedStateDirectories"],properties:{ownedStateDirectories:{type:"array",maxItems:8,uniqueItems:!0,items:{type:"string",pattern:lm,maxLength:240}}}}}},dm=new pm.Ajv2020({allErrors:!0,strict:!0}).compile(RE),Ir=class extends Error{code;issues;constructor(t,r=[]){super(t),this.code=t,this.issues=r}};function PE(e){return v(E(e))}function NE(e){if(!dm(e))throw new Ir("EXAMPLE_RECIPE_INVALID",dm.errors??[]);let t=e,r=[t.rootProfile.capabilityId,...t.capabilities.map(n=>n.capabilityId)];if(new Set(r).size!==r.length||t.capabilities.some(n=>n.version.includes("workspace:")||n.capabilityId.includes("ai-education-poc")))throw new Ir("EXAMPLE_RECIPE_INVALID");return t}async function um(e){let t=await AE(sm.resolve(e)),r;try{r=NE(JSON.parse(await EE(sm.join(t,"recipe.json"),"utf8")))}catch(a){throw a instanceof Ir?a:new Ir("EXAMPLE_RECIPE_INVALID")}let{integrity:n,...i}=r;if(PE(i)!==n)throw new Ir("EXAMPLE_RECIPE_INTEGRITY_MISMATCH");return r}var gm=br(nr(),1);import{readFile as DE,realpath as SE}from"node:fs/promises";import fm from"node:path";var jE={$id:"https://schemas.dyyto.dev/platform/engineering-template-release-v1.json",type:"object",additionalProperties:!1,required:["schemaVersion","templateId","version","integrity","title","summary","status","profile","parameters","commands","technology","support","integration","metrics"],properties:{schemaVersion:{const:1},templateId:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:128},integrity:{type:"string",pattern:ut},title:{type:"string",minLength:1,maxLength:80},summary:{type:"string",minLength:1,maxLength:240},status:{enum:["candidate","recommended","deprecated"]},profile:{type:"object",additionalProperties:!1,required:["id","capability"],properties:{id:{type:"string",pattern:Z},capability:{type:"string",pattern:`${Z.slice(1,-1)}@[0-9]+\\.[0-9]+\\.[0-9]+$`}}},parameters:{type:"array",minItems:0,maxItems:32,items:{type:"object",additionalProperties:!1,required:["id","required","description"],properties:{id:{type:"string",pattern:"^[a-z][A-Za-z0-9]*$"},required:{type:"boolean"},description:{type:"string",minLength:1,maxLength:160}}}},commands:{type:"object",minProperties:1,additionalProperties:!1,properties:{dev:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},build:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},test:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"},package:{type:"string",pattern:"^[a-z][a-z0-9.:-]*$"}}},technology:{type:"array",minItems:1,maxItems:32,items:{type:"object",additionalProperties:!1,required:["id","version","policy","verifiedAt","rationale","alternative","exit"],properties:{id:{type:"string",pattern:Z},version:{type:"string",minLength:1,maxLength:64},policy:{enum:["recommended","allowed"]},verifiedAt:{type:"string",format:"date"},rationale:{type:"string",minLength:1,maxLength:240},alternative:{type:"string",minLength:1,maxLength:160},exit:{type:"string",minLength:1,maxLength:240}}}},support:{type:"object",additionalProperties:!1,required:["owner","tier","supportedFrom","supportedUntil","upgradeCadence","eolNoticeDays"],properties:{owner:{type:"string",pattern:Z},tier:{const:"production"},supportedFrom:{type:"string",format:"date"},supportedUntil:{type:"string",format:"date"},upgradeCadence:{type:"string",minLength:1,maxLength:80},eolNoticeDays:{type:"integer",minimum:30,maximum:730}}},integration:{type:"object",additionalProperties:!1,required:["prerequisites","createCommand","result"],properties:{prerequisites:{type:"array",minItems:1,maxItems:16,items:{type:"string",minLength:1,maxLength:200}},createCommand:{type:"string",minLength:1,maxLength:2e3},result:{type:"string",minLength:1,maxLength:400}}},metrics:{type:"array",minItems:1,uniqueItems:!0,items:{enum:["time-to-green-build","time-to-first-business-commit","manual-engineering-edits","upgrade-conflicts"]}}}},mm=new gm.Ajv2020({allErrors:!0,strict:!0,formats:{date:/^\d{4}-\d{2}-\d{2}$/}}).compile(jE),Rt=class extends Error{code;issues;constructor(t,r=[]){super(t),this.code=t,this.issues=r}};function $E(e){return v(E(e))}function OE(e){if(!mm(e))throw new Rt("TEMPLATE_INVALID",mm.errors??[]);let t=e;if(new Set(t.parameters.map(r=>r.id)).size!==t.parameters.length||new Set(t.technology.map(r=>r.id)).size!==t.technology.length)throw new Rt("TEMPLATE_INVALID");if(Date.parse(t.support.supportedUntil)<=Date.parse(t.support.supportedFrom))throw new Rt("TEMPLATE_INVALID");return t}async function ci(e,t=new Date){let r=await SE(fm.resolve(e)),n;try{n=OE(JSON.parse(await DE(fm.join(r,"template.json"),"utf8")))}catch(o){throw o instanceof Rt?o:new Rt("TEMPLATE_INVALID")}let{integrity:i,...a}=n;if($E(a)!==i)throw new Rt("TEMPLATE_INTEGRITY_MISMATCH");if(n.status==="recommended"&&Date.parse(n.support.supportedUntil)<t.getTime())throw new Rt("TEMPLATE_SUPPORT_EXPIRED");return n}import{readFile as hm}from"node:fs/promises";import ym from"node:path";var CE=/^[A-Z][A-Z0-9_]*$/u,TE=/(?:API_KEY|ACCESS_KEY|SECRET|TOKEN|PASSWORD|PRIVATE_KEY|DATABASE_URL|POSTGRES_URL)$/u;function xE(e){let t=new Map;for(let r of e.split(/\r?\n/u)){let n=/^([A-Z][A-Z0-9_]*)=(.*)$/u.exec(r.trim());if(!n||!CE.test(n[1]))continue;let i=n[1],a=n[2].trim();t.set(i,{name:i,requirement:a.length===0?"conditional":"optional",secret:TE.test(i),configured:!1,source:".env.example",configuredSource:null})}return[...t.values()]}async function wm(e){let t=await hm(ym.join(e.projectRoot,".env.example"),"utf8").then(()=>".env.example").catch(()=>null),r=t?await hm(ym.join(e.projectRoot,t),"utf8"):"",n=await Zn({projectRoot:e.projectRoot}).catch(()=>null);return{commands:["dev","build","test","package"].flatMap(a=>e.commands[a]?[{id:a,script:e.commands[a],mode:a==="dev"?"managed-process":"foreground-task"}]:[]),environment:n?n.entries.map(a=>({name:a.name,requirement:a.required?"conditional":"optional",secret:a.kind!=="value",configured:a.configured,source:"application-config-contract",configuredSource:"APP_CONFIG_DIR",display:a.display,...a.fingerprint?{fingerprint:a.fingerprint}:{}})):xE(r),environmentExample:t,productionValidation:{contract:!0,live:["provider-read","oss-write-read-delete"]}}}var vm={change:new Set(["plan","apply","upgrade","recover","baseline-next","add-package","add-application","add-feature"]),quality:new Set(["inspect","verify","doctor","maintenance","test","build"]),delivery:new Set(["package","delivery-plan","delivery-apply","delivery-inspect"])},Im=new Set(["queued","running","succeeded","failed","outcome-unknown","cancelled"]);function bm(e,t){if(!vm[t.plane]||t.state&&!Im.has(t.state)||t.limit!==void 0&&(!Number.isSafeInteger(t.limit)||t.limit<1||t.limit>200))throw new Error("OPERATION_FILTER_INVALID");let r=vm[t.plane],n=t.from?Date.parse(t.from):null,i=t.to?Date.parse(t.to):null;if(n!==null&&Number.isNaN(n)||i!==null&&Number.isNaN(i)||n!==null&&i!==null&&n>i)throw new Error("OPERATION_FILTER_INVALID");let a=e.filter(d=>r.has(d.operation)),o=[...new Map(a.map(d=>[d.projectId,{id:d.projectId,name:d.projectName}])).values()].sort((d,l)=>d.name.localeCompare(l.name)),s=a.filter(d=>(!t.projectId||d.projectId===t.projectId)&&(!t.state||d.state===t.state)&&(!t.kind||d.operation===t.kind)&&(n===null||Date.parse(d.createdAt)>=n)&&(i===null||Date.parse(d.createdAt)<=i)).sort((d,l)=>l.updatedAt.localeCompare(d.updatedAt)),c={total:s.length,running:s.filter(d=>d.state==="running"||d.state==="queued").length,succeeded:s.filter(d=>d.state==="succeeded").length,attention:s.filter(d=>d.state==="failed"||d.state==="outcome-unknown").length};return Object.freeze({schemaVersion:1,plane:t.plane,summary:Object.freeze(c),facets:Object.freeze({projects:Object.freeze(o),states:Object.freeze([...Im]),kinds:Object.freeze([...r])}),items:Object.freeze(s.slice(0,t.limit??50).map(Object.freeze)),hasMore:s.length>(t.limit??50)})}var li=class extends Error{code;constructor(t,r){super(r),this.code=t}},rl=/^sha256:[a-f0-9]{64}$/u,LE=/^sha512-[A-Za-z0-9+/]{86}==$/u,VE=/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u,ME=/^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?$/u,qE=/[\u0000-\u001f\u007f]/u;function Zr(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype}function Qr(e,t){let r=Object.keys(e).sort(),n=[...t].sort();return r.length===n.length&&r.every((i,a)=>i===n[a])}function Pt(e,t=500){return typeof e=="string"&&e.length>0&&e.length<=t&&!qE.test(e)}function tl(e){return Pt(e,500)&&!e.startsWith("/")&&!e.startsWith("../")&&!e.includes("/../")&&!e.includes("\\")}function km(e,t=128){return Array.isArray(e)&&e.length<=t&&e.every(r=>Pt(r,500))&&e.every((r,n)=>n===0||e[n-1]<r)}function UE(e){return e===null?!0:!Zr(e)||!Qr(e,["fileName","digest","integrity","fileCount","unpackedBytes"])?!1:tl(e.fileName)&&rl.test(String(e.digest))&&LE.test(String(e.integrity))&&Number.isSafeInteger(e.fileCount)&&Number(e.fileCount)>0&&Number.isSafeInteger(e.unpackedBytes)&&Number(e.unpackedBytes)>0}function FE(e){if(!Zr(e)||!Qr(e,["schemaVersion","kind","packageName","version","title","summary","maturity","source","artifact","compatibility","exports","documentation","consumerEvidence"])||e.schemaVersion!==1||e.kind!=="PackageRelease"||!VE.test(e.packageName)||!ME.test(e.version)||!Pt(e.title,120)||!Pt(e.summary,1e3)||!["candidate","stable","deprecated"].includes(e.maturity)||!Zr(e.source)||!Qr(e.source,["repository","path","revision","treeDigest"])||!Pt(e.source.repository)||!tl(e.source.path)||!Pt(e.source.revision,200)||!rl.test(String(e.source.treeDigest))||!UE(e.artifact)||!Zr(e.compatibility)||!Qr(e.compatibility,["node","packageManager"])||!Pt(e.compatibility.node,100)||!Pt(e.compatibility.packageManager,100)||!km(e.exports)||!km(e.consumerEvidence)||!Zr(e.documentation))return!1;let t=e.documentation.knowledgeRef===void 0?["readme"]:["readme","knowledgeRef"];return!Qr(e.documentation,t)||!tl(e.documentation.readme)||e.documentation.knowledgeRef!==void 0&&!Pt(e.documentation.knowledgeRef,500)?!1:e.artifact!==null||e.maturity!=="stable"}function zE(e){let t={schemaVersion:1,kind:"PackageRelease",...e,source:Object.freeze({...e.source}),artifact:e.artifact===null?null:Object.freeze({...e.artifact}),compatibility:Object.freeze({...e.compatibility}),exports:Object.freeze([...e.exports]),documentation:Object.freeze({...e.documentation}),consumerEvidence:Object.freeze([...e.consumerEvidence])};if(!FE(t))throw new li("PACKAGE_RELEASE_INVALID","PackageRelease \u5185\u5BB9\u65E0\u6548");return Object.freeze({...t,releaseDigest:v(E(t))})}function _m(e){if(!Zr(e)||!Qr(e,["schemaVersion","kind","packageName","version","title","summary","maturity","source","artifact","compatibility","exports","documentation","consumerEvidence","releaseDigest"])||!rl.test(String(e.releaseDigest)))throw new li("PACKAGE_RELEASE_INVALID","PackageRelease \u7ED3\u6784\u65E0\u6548");let{releaseDigest:t,schemaVersion:r,kind:n,...i}=e,a=zE(i);if(a.releaseDigest!==t)throw new li("PACKAGE_RELEASE_MODIFIED","PackageRelease \u5DF2\u88AB\u4FEE\u6539");return a}import{lstat as BE,readFile as JE,realpath as GE}from"node:fs/promises";import Em from"node:path";async function Am(e){let t=await GE(Em.resolve(e.projectRoot)),r=new Set(e.excludeCapabilityIds??[]),n=new Map,i=[...e.lock.capabilities].sort((o,s)=>o.committedAt.localeCompare(s.committedAt)||o.capabilityId.localeCompare(s.capabilityId));for(let o of i)if(!r.has(o.capabilityId))for(let s of o.assets){let c=s.ownership??"owned-file",d=`${s.path}\0`;if(c==="managed-region")n.delete(d);else for(let p of n.keys())p.startsWith(d)&&n.delete(p);let l=c==="managed-region"?`${d}${s.regionId??""}`:d;n.set(l,{capabilityId:o.capabilityId,path:s.path,digest:s.digest,ownership:c,...s.regionId===void 0?{}:{regionId:s.regionId}})}let a=[];for(let o of[...n.values()].sort((s,c)=>s.path.localeCompare(c.path)||(s.regionId??"").localeCompare(c.regionId??"")||s.capabilityId.localeCompare(c.capabilityId))){let s=Em.join(t,...o.path.split("/")),d=await BE(s).then(async l=>{if(!l.isFile()||l.isSymbolicLink())return;let p=await JE(s);if(o.ownership!=="managed-region")return v(p);if(o.regionId!==void 0)try{return v(Qi(p.toString("utf8"),o.regionId))}catch{return}}).catch(l=>l.code==="ENOENT"?void 0:Promise.reject(l))===o.digest;a.push({capabilityId:o.capabilityId,path:o.path,kind:"create",ownership:o.ownership,...o.regionId===void 0?{}:{regionId:o.regionId},desiredDigest:o.digest,disposition:d?"noop":"conflict",...d?{}:{conflictCode:"BASE_DIGEST_MISMATCH"}})}return a}var nl="0.1.32",di={DEPENDENCIES_NOT_INSTALLED:4,VERIFIER_RUNTIME_INVALID:4},WE=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/u;function Rm(e,t){return typeof e=="string"&&e.length>0&&e.length<=t&&!WE.test(e)}function KE(e){let t={schemaVersion:1,kind:"dyyto-cli-domain-error",code:e.code,message:e.message,exitCode:di[e.code],...e.nextStep===void 0?{}:{nextStep:e.nextStep}},r=YE(t);if(r===null)throw new TypeError("CLI domain error input is invalid");return r}function YE(e){try{if(typeof e!="object"||e===null||Object.getPrototypeOf(e)!==Object.prototype)return null;let t=Object.getOwnPropertyDescriptors(e);if(Reflect.ownKeys(t).some(s=>typeof s=="symbol"))return null;let r=Object.keys(t).sort(),n="nextStep"in t?["code","exitCode","kind","message","nextStep","schemaVersion"]:["code","exitCode","kind","message","schemaVersion"];if(r.length!==n.length||r.some((s,c)=>s!==n[c])||Object.values(t).some(s=>!("value"in s)))return null;let i=s=>t[s]?.value,a=i("code");if(i("schemaVersion")!==1||i("kind")!=="dyyto-cli-domain-error"||typeof a!="string"||!(a in di)||i("exitCode")!==di[a]||!Rm(i("message"),500))return null;let o=i("nextStep");return o!==void 0&&!Rm(o,500)?null:Object.freeze({schemaVersion:1,kind:"dyyto-cli-domain-error",code:a,message:i("message"),exitCode:4,...o===void 0?{}:{nextStep:o}})}catch{return null}}var Te=class extends Error{code;exitCode;nextStep;domainError;constructor(t){super(t.message),this.name="CliError",this.code=t.code,this.exitCode=t.exitCode,this.nextStep=t.nextStep,this.domainError=t.code in di&&t.exitCode===di[t.code]?KE({code:t.code,message:t.message,...t.nextStep===void 0?{}:{nextStep:t.nextStep}}):void 0}};var Pm=`Dyyto Engineering Platform CLI
|
|
46
46
|
|
|
47
47
|
Usage:
|
|
48
48
|
dyyto <command> [options]
|
package/dist/chunk.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var h=Object.create;var u=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var O=(e,n)=>()=>{try{return n||e((n={exports:{}}).exports,n),n.exports}catch(t){throw n=0,t}};var v=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of C(n))!b.call(e,o)&&o!==t&&u(e,o,{get:()=>n[o],enumerable:!(r=w(n,o))||r.enumerable});return e};var N=(e,n,t)=>(t=e!=null?h(E(e)):{},v(n||!e||!e.__esModule?u(t,"default",{value:e,enumerable:!0}):t,e));var F="0.1.
|
|
1
|
+
var h=Object.create;var u=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var O=(e,n)=>()=>{try{return n||e((n={exports:{}}).exports,n),n.exports}catch(t){throw n=0,t}};var v=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of C(n))!b.call(e,o)&&o!==t&&u(e,o,{get:()=>n[o],enumerable:!(r=w(n,o))||r.enumerable});return e};var N=(e,n,t)=>(t=e!=null?h(E(e)):{},v(n||!e||!e.__esModule?u(t,"default",{value:e,enumerable:!0}):t,e));var F="0.1.32",c={DEPENDENCIES_NOT_INSTALLED:4,VERIFIER_RUNTIME_INVALID:4},D=/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/u;function f(e,n){return typeof e=="string"&&e.length>0&&e.length<=n&&!D.test(e)}function j(e){let n={schemaVersion:1,kind:"dyyto-cli-domain-error",code:e.code,message:e.message,exitCode:c[e.code],...e.nextStep===void 0?{}:{nextStep:e.nextStep}},t=m(n);if(t===null)throw new TypeError("CLI domain error input is invalid");return t}function m(e){try{if(typeof e!="object"||e===null||Object.getPrototypeOf(e)!==Object.prototype)return null;let n=Object.getOwnPropertyDescriptors(e);if(Reflect.ownKeys(n).some(i=>typeof i=="symbol"))return null;let t=Object.keys(n).sort(),r="nextStep"in n?["code","exitCode","kind","message","nextStep","schemaVersion"]:["code","exitCode","kind","message","schemaVersion"];if(t.length!==r.length||t.some((i,k)=>i!==r[k])||Object.values(n).some(i=>!("value"in i)))return null;let o=i=>n[i]?.value,a=o("code");if(o("schemaVersion")!==1||o("kind")!=="dyyto-cli-domain-error"||typeof a!="string"||!(a in c)||o("exitCode")!==c[a]||!f(o("message"),500))return null;let d=o("nextStep");return d!==void 0&&!f(d,500)?null:Object.freeze({schemaVersion:1,kind:"dyyto-cli-domain-error",code:a,message:o("message"),exitCode:4,...d===void 0?{}:{nextStep:d}})}catch{return null}}function T(e){if(e instanceof l&&e.domainError!==void 0)return e.domainError;try{if(typeof e!="object"||e===null)return null;let n=Object.getOwnPropertyDescriptor(e,"domainError");return n!==void 0&&"value"in n?m(n.value):null}catch{return null}}var l=class extends Error{code;exitCode;nextStep;domainError;constructor(n){super(n.message),this.name="CliError",this.code=n.code,this.exitCode=n.exitCode,this.nextStep=n.nextStep,this.domainError=n.code in c&&n.exitCode===c[n.code]?j({code:n.code,message:n.message,...n.nextStep===void 0?{}:{nextStep:n.nextStep}}):void 0}};var z=`Dyyto Engineering Platform CLI
|
|
2
2
|
|
|
3
3
|
Usage:
|
|
4
4
|
dyyto <command> [options]
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "PackageRelease",
|
|
4
|
+
"packageName": "@aipt/cli",
|
|
5
|
+
"version": "0.1.31",
|
|
6
|
+
"title": "Dyyto CLI",
|
|
7
|
+
"summary": "Dyyto 无服务工程能力目录、规划、应用与验证 CLI。",
|
|
8
|
+
"maturity": "candidate",
|
|
9
|
+
"source": {
|
|
10
|
+
"repository": "urn:idp:repository:dyyto",
|
|
11
|
+
"path": "apps/cli",
|
|
12
|
+
"revision": "working-tree",
|
|
13
|
+
"treeDigest": "sha256:59845cea9f459cfccfb4afec80e9eb71227f6319892b83119946bac358d3f6f0"
|
|
14
|
+
},
|
|
15
|
+
"artifact": null,
|
|
16
|
+
"compatibility": {
|
|
17
|
+
"node": ">=24.18.0 <25",
|
|
18
|
+
"packageManager": "pnpm@11.21.0"
|
|
19
|
+
},
|
|
20
|
+
"exports": [],
|
|
21
|
+
"documentation": {
|
|
22
|
+
"readme": "apps/cli/README.md",
|
|
23
|
+
"knowledgeRef": "tech://engineering-capabilities/dyyto/cli"
|
|
24
|
+
},
|
|
25
|
+
"consumerEvidence": [
|
|
26
|
+
"apps/cli/src/distribution.test.ts"
|
|
27
|
+
],
|
|
28
|
+
"releaseDigest": "sha256:ea2b6e8c82c67fcaecae0754405d2da2a8f1e1be65a7ed5e060d3062fd7a1205"
|
|
29
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "PackageRelease",
|
|
4
|
+
"packageName": "@aipt/cli",
|
|
5
|
+
"version": "0.1.32",
|
|
6
|
+
"title": "Dyyto CLI",
|
|
7
|
+
"summary": "Dyyto 无服务工程能力目录、规划、应用与验证 CLI。",
|
|
8
|
+
"maturity": "candidate",
|
|
9
|
+
"source": {
|
|
10
|
+
"repository": "urn:idp:repository:dyyto",
|
|
11
|
+
"path": "apps/cli",
|
|
12
|
+
"revision": "working-tree",
|
|
13
|
+
"treeDigest": "sha256:0e505da7e9f19abb141542cbc6a7746df7e462a82e6fccda62c8d0b87842cbf6"
|
|
14
|
+
},
|
|
15
|
+
"artifact": null,
|
|
16
|
+
"compatibility": {
|
|
17
|
+
"node": ">=24.18.0 <25",
|
|
18
|
+
"packageManager": "pnpm@11.21.0"
|
|
19
|
+
},
|
|
20
|
+
"exports": [],
|
|
21
|
+
"documentation": {
|
|
22
|
+
"readme": "apps/cli/README.md",
|
|
23
|
+
"knowledgeRef": "tech://engineering-capabilities/dyyto/cli"
|
|
24
|
+
},
|
|
25
|
+
"consumerEvidence": [
|
|
26
|
+
"apps/cli/src/distribution.test.ts"
|
|
27
|
+
],
|
|
28
|
+
"releaseDigest": "sha256:79b9a87f1648591b5fcc10335752b0c32ff37546c3a5a1568fb0faf4214b6fde"
|
|
29
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"kind": "PackageRelease",
|
|
4
|
+
"packageName": "@aipt/idp-setup",
|
|
5
|
+
"version": "0.1.5",
|
|
6
|
+
"title": "IDP Sources Setup CLI",
|
|
7
|
+
"summary": "IDP Sources 本地工程环境与外部 Config Dir 初始化 CLI。",
|
|
8
|
+
"maturity": "candidate",
|
|
9
|
+
"source": {
|
|
10
|
+
"repository": "urn:idp:repository:dyyto",
|
|
11
|
+
"path": "apps/idp-setup",
|
|
12
|
+
"revision": "working-tree",
|
|
13
|
+
"treeDigest": "sha256:ed26fa14aa99480101541adbbcd8cd6aacfb9a332c6fb1d1cc332e24340f8d68"
|
|
14
|
+
},
|
|
15
|
+
"artifact": null,
|
|
16
|
+
"compatibility": {
|
|
17
|
+
"node": ">=22.14.0",
|
|
18
|
+
"packageManager": "pnpm@11.21.0"
|
|
19
|
+
},
|
|
20
|
+
"exports": [],
|
|
21
|
+
"documentation": {
|
|
22
|
+
"readme": "apps/idp-setup/README.md",
|
|
23
|
+
"knowledgeRef": "tech://engineering-capabilities/idp/setup"
|
|
24
|
+
},
|
|
25
|
+
"consumerEvidence": [
|
|
26
|
+
"apps/idp-setup/test/distribution.test.mjs",
|
|
27
|
+
"apps/idp-setup/test/idp-setup.test.mjs",
|
|
28
|
+
"tooling/idp-setup.test.mjs"
|
|
29
|
+
],
|
|
30
|
+
"releaseDigest": "sha256:5f092ada4f5d70dfc702eb86ce02b81a5d32a9c2f576cbe91d0db5361c308e7a"
|
|
31
|
+
}
|
package/docs/bootstrap.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
# Bootstrap
|
|
2
2
|
|
|
3
|
-
每台机器先执行一次 `corepack pnpm dlx @aipt/idp-setup@0.1.
|
|
3
|
+
每台机器先执行一次 `corepack pnpm dlx @aipt/idp-setup@0.1.5 init --root <Sources绝对目录>`,由它生成并持久化 `sources.env`、建立稳定 `PNPM_HOME`、安装精确工具链。每个工作区或独立项目执行一次 `idp-setup bootstrap --project <绝对目录>`,统一完成 Dyyto 工程纳管、`apps/*`、`services/*` 可部署 Application Config Dir 初始化以及 Development Readiness 检查。直接使用 `dyyto bootstrap` 是高级入口,要求环境已有绝对 `PNPM_HOME`;离线环境可使用 `--skip-tool-install`。
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
业务项目只保留短入口规则,不复制平台规范全文。首次接入执行:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
|
-
corepack pnpm dlx @aipt/idp-setup@0.1.
|
|
6
|
+
corepack pnpm dlx @aipt/idp-setup@0.1.5 init --root /absolute/sources
|
|
7
7
|
source /absolute/sources/config/idp/generated/sources.env
|
|
8
8
|
idp-setup bootstrap --project "$PWD"
|
|
9
9
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"package": "@aipt/cli",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.32",
|
|
5
5
|
"documents": [
|
|
6
6
|
{ "id": "bootstrap", "path": "docs/bootstrap.md", "digest": "sha256:68fc0f0336f74cb20ab828e5addf1b9e0ff03da24063c8eda4afa5655388d93c" },
|
|
7
7
|
{ "id": "agent-integration", "path": "docs/agent-integration.md", "digest": "sha256:6b3e9425bd5caf233971bc27dc2ef765bd1e9b92a049d3a394e075ed80c0863f" },
|