workspai 0.51.0 → 0.52.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.
Files changed (110) hide show
  1. package/README.md +1 -0
  2. package/contracts/artifact-remediation-plan.v1.json +87 -0
  3. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +24 -0
  4. package/contracts/doctor-project-evidence.v1.json +46 -0
  5. package/contracts/doctor-remediation-plan.v1.json +82 -0
  6. package/contracts/doctor-workspace-evidence.v1.json +46 -0
  7. package/contracts/extension-cli-compatibility.v1.json +6 -2
  8. package/contracts/published-contract-catalog.v1.json +22 -1
  9. package/contracts/runtime-command-surface.v1.json +104 -0
  10. package/contracts/workspace-intelligence/doctor-dependency-repair-transaction.v1.json +66 -0
  11. package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +5 -0
  12. package/contracts/workspace-intelligence/verified-goal-status.v1.json +27 -0
  13. package/contracts/workspace-intelligence/verified-goal.v1.json +163 -0
  14. package/contracts/workspace-intelligence-chain.v1.json +6 -0
  15. package/dist/analyze-J7VNZMDH.js +1 -0
  16. package/dist/artifact-remediation-plan-2UKY4TKO.js +3 -0
  17. package/dist/autopilot-release-UG23AWVH.js +1 -0
  18. package/dist/chunk-27UR373Z.js +1 -0
  19. package/dist/chunk-2PY65U6X.js +5 -0
  20. package/dist/{chunk-DQ3PI7EP.js → chunk-3D3PFPP5.js} +1 -1
  21. package/dist/chunk-4D7DIGAB.js +1 -0
  22. package/dist/{chunk-IND3TUVU.js → chunk-4UVGTFOX.js} +1 -1
  23. package/dist/{chunk-U2QL5733.js → chunk-5XJRCP3D.js} +24 -24
  24. package/dist/chunk-62K2H72S.js +1 -0
  25. package/dist/chunk-6AXRIAP2.js +86 -0
  26. package/dist/{chunk-TROHVI2V.js → chunk-6HJJHEL6.js} +1 -1
  27. package/dist/{chunk-BHYTI3RH.js → chunk-6PBSAAS5.js} +1 -1
  28. package/dist/{chunk-MVLIONQD.js → chunk-7MQZQ4UU.js} +1 -1
  29. package/dist/chunk-7RLGOEWV.js +1 -0
  30. package/dist/chunk-B4CPDK6J.js +2 -0
  31. package/dist/{chunk-SHXJ2GDR.js → chunk-DZ4VKAXB.js} +1 -1
  32. package/dist/{chunk-FKWB66NQ.js → chunk-F4KBYFZ5.js} +1 -1
  33. package/dist/{chunk-Q6TKQVKQ.js → chunk-FRJYAJH6.js} +1 -1
  34. package/dist/chunk-FUPHQOJB.js +1 -0
  35. package/dist/{chunk-BG4FWJJ3.js → chunk-GHB6QMQH.js} +1 -1
  36. package/dist/chunk-GR6442P7.js +1 -0
  37. package/dist/{chunk-DLM6C7FU.js → chunk-HPWLSLMC.js} +1 -1
  38. package/dist/{chunk-HMGPELXS.js → chunk-ICLYL3N5.js} +1 -1
  39. package/dist/{chunk-MAF3LLGK.js → chunk-IO54DFWR.js} +1 -1
  40. package/dist/{chunk-FZ76CF2W.js → chunk-KHEJO3JU.js} +1 -1
  41. package/dist/{chunk-U2LR73E2.js → chunk-LOCPNNSK.js} +1 -1
  42. package/dist/{chunk-EPVFKJF4.js → chunk-LPCL4U4L.js} +1 -1
  43. package/dist/{chunk-4WJC5QCD.js → chunk-M5ICGR55.js} +1 -1
  44. package/dist/{chunk-XBM2P45G.js → chunk-MBRU3VWJ.js} +1 -1
  45. package/dist/{chunk-VCW5HSPC.js → chunk-MZFSINY7.js} +3 -3
  46. package/dist/{chunk-E3CT7TYT.js → chunk-OTDGTAZJ.js} +1 -1
  47. package/dist/chunk-P4OSLAVD.js +3 -0
  48. package/dist/{chunk-GBAO4GSW.js → chunk-PTTZPDLX.js} +1 -1
  49. package/dist/chunk-Q6CUJ3WF.js +10 -0
  50. package/dist/{chunk-6HLPTJZ3.js → chunk-QURMI7ID.js} +1 -1
  51. package/dist/{chunk-RVQLMTTI.js → chunk-ULR66OJR.js} +1 -1
  52. package/dist/{chunk-HSZCINFX.js → chunk-WJY7ZXVJ.js} +1 -1
  53. package/dist/{chunk-VU2BKKMB.js → chunk-XHRHNVCZ.js} +1 -1
  54. package/dist/chunk-ZTKIBREF.js +1 -0
  55. package/dist/{chunk-HE4PUMU4.js → chunk-ZVOEPWQM.js} +1 -1
  56. package/dist/{create-SBFBFXKN.js → create-ESK3CQPK.js} +1 -1
  57. package/dist/{doctor-OPCMTBJB.js → doctor-DLEBZSF7.js} +1 -1
  58. package/dist/index.d.ts +26 -11
  59. package/dist/index.js +240 -240
  60. package/dist/{pipeline-7BUXAFS2.js → pipeline-NT6AYYWM.js} +1 -1
  61. package/dist/{project-intelligence-lens-BKKVPCLC.js → project-intelligence-lens-Q4SZDI2N.js} +1 -1
  62. package/dist/project-test-coverage-A677ZLW3.js +1 -0
  63. package/dist/verified-goal-MJNZROS5.js +1 -0
  64. package/dist/{workspace-U6ZQLELX.js → workspace-LSOZM2CG.js} +1 -1
  65. package/dist/{workspace-agent-sync-L4SY7B4Q.js → workspace-agent-sync-RZBQXCNJ.js} +1 -1
  66. package/dist/{workspace-archive-4JNT4S7N.js → workspace-archive-ZOWQXWJ6.js} +1 -1
  67. package/dist/{workspace-context-KOBSLZTI.js → workspace-context-IYJKO5BN.js} +1 -1
  68. package/dist/{workspace-contract-SOD3OOVF.js → workspace-contract-AZFISDLS.js} +1 -1
  69. package/dist/workspace-explain-26UGV7L4.js +1 -0
  70. package/dist/workspace-explain-contract-GIWPCCEF.js +1 -0
  71. package/dist/{workspace-feedback-ZZ4HPW2T.js → workspace-feedback-LIHEWTNV.js} +1 -1
  72. package/dist/{workspace-foundation-PUIYBQUF.js → workspace-foundation-H5UTAUXQ.js} +1 -1
  73. package/dist/{workspace-graph-stream-BLKIC7VN.js → workspace-graph-stream-KUDOZE73.js} +1 -1
  74. package/dist/{workspace-history-SPKNRHIX.js → workspace-history-HULG5EFN.js} +1 -1
  75. package/dist/{workspace-intelligence-I3ABOH2F.js → workspace-intelligence-A4UE4DZK.js} +1 -1
  76. package/dist/{workspace-intelligence-evaluation-7CABG5Y6.js → workspace-intelligence-evaluation-AOLGHYHC.js} +1 -1
  77. package/dist/workspace-intelligence-runner-42QI5RYA.js +1 -0
  78. package/dist/{workspace-intelligence-runtime-registry-ZZ3GRAL2.js → workspace-intelligence-runtime-registry-YOQ5GFFJ.js} +1 -1
  79. package/dist/{workspace-knowledge-graph-5MKEI4Z5.js → workspace-knowledge-graph-LEM6X5CM.js} +1 -1
  80. package/dist/{workspace-mcp-serve-ETNUA72W.js → workspace-mcp-serve-N2QPR7VJ.js} +1 -1
  81. package/dist/{workspace-model-HHA37SNH.js → workspace-model-FJXX3NET.js} +1 -1
  82. package/dist/{workspace-onboarding-ELHZABJE.js → workspace-onboarding-IKFISWWY.js} +1 -1
  83. package/dist/{workspace-readme-HGGZ4AZB.js → workspace-readme-E2M35RJH.js} +1 -1
  84. package/dist/{workspace-registry-summary-D2QM5JF6.js → workspace-registry-summary-HOQ3OBNT.js} +1 -1
  85. package/dist/workspace-run-GOZTUGJS.js +1 -0
  86. package/dist/{workspace-verify-4WJTLXRA.js → workspace-verify-32AWCJQG.js} +1 -1
  87. package/dist/workspace-watch-4WVNB26E.js +1 -0
  88. package/docs/README.md +1 -0
  89. package/docs/ci-workflows.md +40 -11
  90. package/docs/commands-reference.md +12 -0
  91. package/docs/doctor-command.md +16 -0
  92. package/docs/workspace-intelligence-runner.md +48 -0
  93. package/package.json +4 -2
  94. package/dist/analyze-4H33PAUB.js +0 -1
  95. package/dist/artifact-remediation-plan-TQ6KTTXD.js +0 -3
  96. package/dist/autopilot-release-BHZYM5KX.js +0 -1
  97. package/dist/chunk-2D4UOYOJ.js +0 -1
  98. package/dist/chunk-3D2PAIRH.js +0 -3
  99. package/dist/chunk-AHLMIL2T.js +0 -1
  100. package/dist/chunk-BBGNDMRU.js +0 -2
  101. package/dist/chunk-BYTFXQ6G.js +0 -1
  102. package/dist/chunk-GQRWRHSR.js +0 -86
  103. package/dist/chunk-L2E2Z4OE.js +0 -5
  104. package/dist/chunk-TDTCMZK7.js +0 -10
  105. package/dist/project-test-coverage-BALEHHTT.js +0 -1
  106. package/dist/workspace-explain-2CTMW2YW.js +0 -1
  107. package/dist/workspace-explain-contract-H7O26QJU.js +0 -1
  108. package/dist/workspace-intelligence-runner-Q2XSR3ZL.js +0 -1
  109. package/dist/workspace-run-DAAZBCN7.js +0 -1
  110. package/dist/workspace-watch-2PIFTQ6B.js +0 -1
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://workspai.dev/schemas/workspace-intelligence/verified-goal-status.v1.json",
4
+ "title": "Workspai Verified Goal Status",
5
+ "description": "The durable progress and evidence-derived terminal state of a Workspai verified goal.",
6
+ "type": "object",
7
+ "required": ["schemaVersion", "goalId", "goalFingerprint", "workspacePath", "updatedAt", "state", "attempt", "progress", "checks", "blockingReasons", "evidencePaths", "nextActions", "artifactPath"],
8
+ "properties": {
9
+ "schemaVersion": { "const": "workspai.verified-goal-status.v1" },
10
+ "goalId": { "type": "string", "minLength": 8 },
11
+ "goalFingerprint": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
12
+ "workspacePath": { "type": "string", "minLength": 1 },
13
+ "updatedAt": { "type": "string", "format": "date-time" },
14
+ "state": { "enum": ["planned", "active", "blocked", "verified", "failed", "cancelled"] },
15
+ "attempt": { "type": "integer", "minimum": 0 },
16
+ "progress": { "$ref": "#/$defs/measurement" },
17
+ "checks": { "type": "array", "items": { "type": "object", "required": ["id", "label", "status", "expected", "actual", "message"], "properties": { "id": { "type": "string", "minLength": 1 }, "label": { "type": "string", "minLength": 1 }, "status": { "enum": ["passed", "failed", "blocked", "missing", "skipped"] }, "expected": { "type": "string", "minLength": 1 }, "actual": { "type": "string", "minLength": 1 }, "evidencePath": { "type": "string", "minLength": 1 }, "message": { "type": "string", "minLength": 1 } }, "additionalProperties": false } },
18
+ "blockingReasons": { "type": "array", "items": { "type": "string", "minLength": 1 } },
19
+ "evidencePaths": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true },
20
+ "nextActions": { "type": "array", "items": { "type": "string", "minLength": 1 } },
21
+ "artifactPath": { "type": "string", "minLength": 1 }
22
+ },
23
+ "$defs": {
24
+ "measurement": { "type": "object", "required": ["measuredAt", "value", "target", "unit", "status", "evidencePaths", "message"], "properties": { "measuredAt": { "type": "string", "format": "date-time" }, "value": { "type": ["number", "null"] }, "target": { "type": ["number", "null"] }, "unit": { "enum": ["percent", "blocking-vulnerabilities", "gates", "unknown"] }, "status": { "enum": ["satisfied", "unsatisfied", "unavailable"] }, "evidencePaths": { "type": "array", "items": { "type": "string", "minLength": 1 }, "uniqueItems": true }, "message": { "type": "string", "minLength": 1 } }, "additionalProperties": false }
25
+ },
26
+ "additionalProperties": false
27
+ }
@@ -0,0 +1,163 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://workspai.dev/schemas/workspace-intelligence/verified-goal.v1.json",
4
+ "title": "Workspai Verified Goal",
5
+ "description": "A durable, deterministic success contract for an agent-executed engineering goal.",
6
+ "type": "object",
7
+ "required": [
8
+ "schemaVersion",
9
+ "id",
10
+ "fingerprint",
11
+ "createdAt",
12
+ "updatedAt",
13
+ "workspace",
14
+ "scope",
15
+ "kind",
16
+ "summary",
17
+ "constraints",
18
+ "criteria",
19
+ "baseline",
20
+ "artifactPaths"
21
+ ],
22
+ "properties": {
23
+ "schemaVersion": { "const": "workspai.verified-goal.v1" },
24
+ "id": { "type": "string", "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{7,95}$" },
25
+ "fingerprint": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
26
+ "createdAt": { "type": "string", "format": "date-time" },
27
+ "updatedAt": { "type": "string", "format": "date-time" },
28
+ "workspace": {
29
+ "type": "object",
30
+ "required": ["name", "path"],
31
+ "properties": {
32
+ "name": { "type": "string", "minLength": 1 },
33
+ "path": { "type": "string", "minLength": 1 }
34
+ },
35
+ "additionalProperties": false
36
+ },
37
+ "scope": {
38
+ "type": "object",
39
+ "required": ["kind"],
40
+ "properties": {
41
+ "kind": { "enum": ["workspace", "project"] },
42
+ "projectName": { "type": "string", "minLength": 1 },
43
+ "projectPath": { "type": "string", "minLength": 1 }
44
+ },
45
+ "allOf": [
46
+ {
47
+ "if": { "properties": { "kind": { "const": "project" } } },
48
+ "then": {
49
+ "properties": {
50
+ "projectName": { "type": "string", "minLength": 1 },
51
+ "projectPath": { "type": "string", "minLength": 1 }
52
+ },
53
+ "required": ["projectName", "projectPath"]
54
+ }
55
+ }
56
+ ],
57
+ "additionalProperties": false
58
+ },
59
+ "kind": { "enum": ["release-readiness", "dependency-security", "test-coverage"] },
60
+ "summary": { "type": "string", "minLength": 1 },
61
+ "constraints": {
62
+ "type": "object",
63
+ "required": ["allowBreakingChanges", "allowForce", "requireBuild", "requireTests"],
64
+ "properties": {
65
+ "allowBreakingChanges": { "type": "boolean" },
66
+ "allowForce": { "type": "boolean" },
67
+ "requireBuild": { "type": "boolean" },
68
+ "requireTests": { "type": "boolean" }
69
+ },
70
+ "additionalProperties": false
71
+ },
72
+ "criteria": {
73
+ "oneOf": [
74
+ {
75
+ "type": "object",
76
+ "required": ["kind", "readiness", "workspaceVerify"],
77
+ "properties": {
78
+ "kind": { "const": "release-readiness" },
79
+ "readiness": { "const": "pass" },
80
+ "workspaceVerify": { "const": "ready" }
81
+ },
82
+ "additionalProperties": false
83
+ },
84
+ {
85
+ "type": "object",
86
+ "required": ["kind", "maximumBlockingVulnerabilities", "requireFreshAudit"],
87
+ "properties": {
88
+ "kind": { "const": "dependency-security" },
89
+ "maximumBlockingVulnerabilities": { "const": 0 },
90
+ "requireFreshAudit": { "const": true }
91
+ },
92
+ "additionalProperties": false
93
+ },
94
+ {
95
+ "type": "object",
96
+ "required": ["kind", "metric", "minimumPercent"],
97
+ "properties": {
98
+ "kind": { "const": "test-coverage" },
99
+ "metric": { "const": "auto" },
100
+ "minimumPercent": { "type": "number", "minimum": 0, "maximum": 100 }
101
+ },
102
+ "additionalProperties": false
103
+ }
104
+ ]
105
+ },
106
+ "baseline": { "$ref": "#/$defs/measurement" },
107
+ "dependencySafetyBaseline": {
108
+ "type": "object",
109
+ "required": ["manifests"],
110
+ "properties": {
111
+ "manifests": {
112
+ "type": "array",
113
+ "items": {
114
+ "type": "object",
115
+ "required": ["path", "ecosystem", "sha256"],
116
+ "properties": {
117
+ "path": { "type": "string", "minLength": 1 },
118
+ "ecosystem": { "type": "string", "minLength": 1 },
119
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
120
+ "dependencies": {
121
+ "type": "object",
122
+ "additionalProperties": { "type": "string", "minLength": 1 }
123
+ }
124
+ },
125
+ "additionalProperties": false
126
+ }
127
+ }
128
+ },
129
+ "additionalProperties": false
130
+ },
131
+ "artifactPaths": {
132
+ "type": "object",
133
+ "required": ["goal", "status", "latestReport"],
134
+ "properties": {
135
+ "goal": { "type": "string", "minLength": 1 },
136
+ "status": { "type": "string", "minLength": 1 },
137
+ "latestReport": { "type": "string", "minLength": 1 }
138
+ },
139
+ "additionalProperties": false
140
+ }
141
+ },
142
+ "$defs": {
143
+ "measurement": {
144
+ "type": "object",
145
+ "required": ["measuredAt", "value", "target", "unit", "status", "evidencePaths", "message"],
146
+ "properties": {
147
+ "measuredAt": { "type": "string", "format": "date-time" },
148
+ "value": { "type": ["number", "null"] },
149
+ "target": { "type": ["number", "null"] },
150
+ "unit": { "enum": ["percent", "blocking-vulnerabilities", "gates", "unknown"] },
151
+ "status": { "enum": ["satisfied", "unsatisfied", "unavailable"] },
152
+ "evidencePaths": {
153
+ "type": "array",
154
+ "items": { "type": "string", "minLength": 1 },
155
+ "uniqueItems": true
156
+ },
157
+ "message": { "type": "string", "minLength": 1 }
158
+ },
159
+ "additionalProperties": false
160
+ }
161
+ },
162
+ "additionalProperties": false
163
+ }
@@ -215,6 +215,12 @@
215
215
  "path": ".workspai/reports/workspace-intelligence-evaluation-last-run.json",
216
216
  "schemaVersion": "workspace-intelligence-evaluation.v1",
217
217
  "schemaContract": "contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json"
218
+ },
219
+ {
220
+ "id": "verifiedGoalStatus",
221
+ "path": ".workspai/reports/verified-goal-last-run.json",
222
+ "schemaVersion": "workspai.verified-goal-status.v1",
223
+ "schemaContract": "contracts/workspace-intelligence/verified-goal-status.v1.json"
218
224
  }
219
225
  ]
220
226
  },
@@ -0,0 +1 @@
1
+ export{b as printAnalyzeReport,a as runAnalyze}from'./chunk-HPWLSLMC.js';
@@ -0,0 +1,3 @@
1
+ import {a as a$2}from'./chunk-ZTKIBREF.js';import {a as a$1}from'./chunk-2E6WGUN6.js';import {a,e,b as b$1}from'./chunk-MBRU3VWJ.js';import b from'path';import {existsSync}from'fs';import E from'fs-extra';var T=[{artifactKind:"bootstrap-compliance",cardId:"bootstrap",fileNames:["bootstrap-compliance.latest.json"]},{artifactKind:"doctor-workspace",cardId:"doctor",fileNames:["doctor-remediation-plan-last-run.json","doctor-last-run.json"]},{artifactKind:"analyze",cardId:"analyze",fileNames:["analyze-last-run.json"]},{artifactKind:"readiness",cardId:"readiness",fileNames:["release-readiness-last-run.json"]},{artifactKind:"pipeline",cardId:"pipeline",fileNames:["pipeline-last-run.json"]},{artifactKind:"workspace-run",cardId:"workspaceRun",fileNames:["workspace-run-last.json"]},{artifactKind:"workspace-verify",cardId:"workspaceVerify",fileNames:["workspace-verify-last-run.json"]}];function m(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function k(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}function v(e){return [...new Set(e.map(t=>t.trim()).filter(Boolean))]}function P(e,t,o){return o?t:b.relative(e,t).split(b.sep).join("/")}function B(e){let t=e?.trim()||"npx workspai bootstrap";if(!/(?:^|\s)--ci(?:\s|$)/.test(t)&&/(?:^|\s)--json(?:\s|$)/.test(t))return t.replace(/(?:^|\s)--json(?:\s|$)/,s=>{let r=s.startsWith(" ")?" ":"",i=s.endsWith(" ")?" ":"";return `${r}--ci --json${i}`}).trim();let o=/(?:^|\s)--ci(?:\s|$)/.test(t)?t:`${t} --ci`;return /(?:^|\s)--json(?:\s|$)/.test(o)?o:`${o} --json`}function _(e){return `${JSON.stringify({schemaVersion:"rapidkit.compatibility-matrix.v1",generatedAt:e,source:"workspai workspace remediation-plan",runtimes:{},notes:["Minimal enterprise baseline. Add runtime and toolchain entries as governance matures."]},null,2)}
2
+ `}function z(e){return `${JSON.stringify({schema_version:"1.0",enabled:false,strategy:"on-demand",artifacts:[],created_at:e,note:"Minimal enterprise baseline. Set enabled: true and add artifact entries to activate mirroring."},null,2)}
3
+ `}function V(e){let t=e.payload,o=k(t.blockers),s=k(t.blockingReasons),r=k(t.failures),i=k(t.reasons),c=k(t.policyViolations),n=m(t.summary),u=k(n?.blockers);if(e.artifactKind==="analyze"){let a=(Array.isArray(t.findings)?t.findings:[]).map(d=>m(d)).filter(d=>!!d).map(d=>String(d.message??d.title??d.id??"").trim()).filter(Boolean);return v([...o,...a,...s])}if(e.artifactKind==="workspace-run"){let p=m(t.stages),a=Object.entries(p??{}).flatMap(([d,f])=>{let h=m(f);return (Array.isArray(h?.projects)?h.projects:[]).map(l=>m(l)).filter(l=>!!l).filter(l=>l.status==="failed"||l.ok===false).map(l=>`${d}: ${String(l.project??l.name??"project")} failed`)});return v([...o,...a,...s])}return v([...o,...s,...r,...i,...c,...u])}function j(e){return {id:e.id,artifactKind:e.artifactKind,cardId:e.cardId,title:e.title,order:e.order,phase:e.phase,scope:e.scope??"workspace",...e.projectName?{projectName:e.projectName}:{},...e.projectPath?{projectPath:e.projectPath}:{},...e.sourceStepId?{sourceStepId:e.sourceStepId}:{},...e.dependsOn?{dependsOn:e.dependsOn}:{},...e.strategy?{strategy:structuredClone(e.strategy)}:{},...e.transaction?{transaction:structuredClone(e.transaction)}:{},status:e.status??"ready",mode:e.mode,risk:e.risk,requiresApproval:true,blocker:e.blocker,summary:e.summary,...e.command?{command:e.command}:{},verifyCommand:e.verifyCommand,cwd:e.cwd??"workspace",files:e.files??[],...e.operation?{operation:e.operation}:{},rollback:e.rollback??(e.operation?{available:true,strategy:"idempotent"}:{available:false,strategy:"none"}),notes:e.notes??[]}}function q(e){return (Array.isArray(e.report.payload.steps)?e.report.payload.steps:[]).flatMap((o,s)=>{let r=m(o),i=typeof r?.id=="string"?r.id.trim():"",c=typeof r?.projectName=="string"?r.projectName.trim():"",n=typeof r?.projectPath=="string"?r.projectPath.trim():"",u=typeof r?.originalCommand=="string"?r.originalCommand.trim():"";if(!r||!i||!c||!n)return [];let p=m(r.studioStatus),a=p?.state==="ready"||p?.state==="review-required"||p?.state==="blocked"||p?.state==="guidance-only"?p.state:"guidance-only",d=r.risk==="safe"||r.risk==="guarded"||r.risk==="invasive"?r.risk:"guarded",f=m(r.preview),h=P(e.workspacePath,n,e.includeAbsolutePaths),g=N({capability:{...r,command:u},absoluteProjectPath:n,includeAbsolutePaths:e.includeAbsolutePaths}),l=r.executableInCurrentEnvironment===true&&!!g,y=O({strategy:r.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),A=m(r.transaction),x=A?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone(A):void 0;return x&&(x.projectPath=h),[j({id:`doctor.${i}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof f?.title=="string"&&f.title.trim()?f.title.trim():`Repair ${c}`,order:e.startOrder+s,phase:typeof r.phase=="string"?r.phase:"doctor-remediation",blocker:typeof f?.summary=="string"&&f.summary.trim()?f.summary.trim():`Doctor remediation is pending for ${c}.`,summary:typeof f?.summary=="string"&&f.summary.trim()?f.summary.trim():`Execute the CLI-authored Doctor step for ${c}.`,mode:l?"run-command":"manual-guidance",risk:d,status:a,...l&&g?{command:g}:{},verifyCommand:typeof r.verifyCommand=="string"&&r.verifyCommand.trim()?r.verifyCommand.trim():"npx workspai doctor project --json",files:k(r.files).map(w=>{let R=b.isAbsolute(w)?w:b.resolve(n,w);return P(e.workspacePath,R,e.includeAbsolutePaths)}),notes:[`Source Doctor step: ${i}`,...typeof p?.reason=="string"?[p.reason]:[]],scope:"project",projectName:c,projectPath:h,sourceStepId:i,dependsOn:k(r.dependsOn).map(w=>`doctor.${w}`),strategy:y,transaction:x,cwd:"project",...m(r.rollback)?.available===true?{rollback:{available:true,strategy:"manual"}}:{}})]})}function N(e){let t=typeof e.capability.command=="string"?e.capability.command.trim():"";if(e.includeAbsolutePaths&&t)return t;let o=F({operation:e.capability.operation,absoluteProjectPath:e.absoluteProjectPath});if(o)return a$2(o);let s=m(e.capability.invocation),r=typeof s?.executable=="string"?s.executable.trim():"",i=k(s?.args);if(r)return [r,...i].map(n=>/^[a-zA-Z0-9_./:@=+-]+$/.test(n)?n:JSON.stringify(n)).join(" ");if(!t)return;let c=e.absoluteProjectPath.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`^cd\\s+["']?${c}["']?\\s*&&\\s*`,"i"),"").replaceAll(e.absoluteProjectPath,".")}function F(e){let t=m(e.operation);if(!t||typeof t.type!="string")return;let o=structuredClone(t);for(let s of ["path","sourcePath"]){let r=o[s];if(typeof r!="string")continue;let i=b.isAbsolute(r)?b.relative(e.absoluteProjectPath,r):r;if(!i||i===".."||i.startsWith(`..${b.sep}`)||b.isAbsolute(i))return;o[s]=i.split(b.sep).join("/");}return o}function O(e){if(!Array.isArray(e.strategy))return;let t=structuredClone(e.strategy);if(!e.includeAbsolutePaths)for(let o of t)o.invocation&&(o.invocation.cwd=".");return t}function W(e){let t=Array.isArray(e.report.payload.projects)?e.report.payload.projects:e.report.payload.project?[e.report.payload.project]:[],o=new Set,s=[];for(let r of t){let i=m(r);if(!i)continue;let c=typeof i.name=="string"?i.name.trim():"",n=typeof i.path=="string"?i.path.trim():"";if(!c||!n)continue;let u=Array.isArray(i.repairCapabilities)?i.repairCapabilities:Array.isArray(i.probes)?i.probes.map(p=>m(p)?.repairCapability).filter(p=>p!==void 0):[];for(let p of u){let a=m(p),d=typeof a?.id=="string"?a.id.trim():"";if(!a||!d)continue;let f=`${c}:${d}`;if(o.has(f))continue;o.add(f);let h=a.risk==="safe"||a.risk==="guarded"||a.risk==="invasive"?a.risk:"guarded",g=N({capability:a,absoluteProjectPath:n,includeAbsolutePaths:e.includeAbsolutePaths}),l=a.status==="available"&&!!g,y=m(a.transaction),A=y?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone(y):void 0;A&&(A.projectPath=P(e.workspacePath,n,e.includeAbsolutePaths));let x=O({strategy:a.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),w=k(a.files).map(C=>P(e.workspacePath,C,e.includeAbsolutePaths)),R=g?s.find(C=>C.projectName===c&&C.command===g&&C.cwd==="project"):void 0;if(R){R.files=v([...R.files,...w]),R.notes=v([...R.notes,`Also satisfies Doctor capability: ${d}`]);continue}s.push(j({id:`doctor.${c}.${d}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof a.title=="string"&&a.title.trim()?a.title.trim():`Repair ${c}`,order:e.startOrder+s.length,phase:A?"dependency-remediation":"doctor-remediation",blocker:typeof a.reason=="string"&&a.reason.trim()?a.reason.trim():`Doctor remediation is pending for ${c}.`,summary:typeof a.reason=="string"&&a.reason.trim()?a.reason.trim():`Execute the Doctor-authored repair capability for ${c}.`,mode:l?a.canEditFiles===true?"edit-file":"run-command":"manual-guidance",risk:h,status:l?"ready":a.status==="manual"?"guidance-only":"blocked",...g?{command:g}:{},verifyCommand:typeof a.verifyCommand=="string"&&a.verifyCommand.trim()?a.verifyCommand.trim():"npx workspai doctor project --json",files:w,notes:[`Source Doctor capability: ${d}`,...k(a.limitations)],scope:"project",projectName:c,projectPath:P(e.workspacePath,n,e.includeAbsolutePaths),sourceStepId:d,strategy:x,transaction:A,cwd:"project",...a.operation?{rollback:{available:true,strategy:"manual"}}:{}}));}}return s}function J(e){let t=[],o=B("npx workspai bootstrap --json");for(let s of e.blockers)s.includes("profile.enterprise.ci")&&t.push(j({id:"bootstrap.enterprise-ci",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Run bootstrap in deterministic CI mode",order:10,phase:"bootstrap-preflight",blocker:s,summary:"Enterprise bootstrap compliance requires --ci for deterministic execution.",mode:"run-command",risk:"safe",command:o,verifyCommand:o})),s.includes("profile.enterprise.compatibility-matrix")&&t.push(j({id:"bootstrap.compatibility-matrix",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise compatibility matrix baseline",order:20,phase:"bootstrap-config",blocker:s,summary:"Create the missing compatibility matrix baseline without overwriting user data.",mode:"edit-file",risk:"safe",verifyCommand:o,files:[".workspai/compatibility-matrix.json"],operation:{type:"file-create",path:".workspai/compatibility-matrix.json",content:_(e.generatedAt),overwrite:false}})),s.includes("profile.enterprise.mirror-config")&&t.push(j({id:"bootstrap.mirror-config",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise mirror config baseline",order:30,phase:"bootstrap-config",blocker:s,summary:"Create the missing mirror configuration baseline without enabling mirroring.",mode:"edit-file",risk:"safe",verifyCommand:o,files:[".workspai/mirror-config.json"],operation:{type:"file-create",path:".workspai/mirror-config.json",content:z(e.generatedAt),overwrite:false}}));return t}function L(e){if(e.report.artifactKind==="readiness"&&/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(e.blocker))return j({id:`${e.report.cardId}.doctor-owner.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:"Resolve dependency vulnerability through Doctor",order:e.order,phase:"dependency-remediation",blocker:e.blocker,summary:"Release Readiness is the aggregate gate; use the project-scoped Doctor remediation capability that owns this dependency failure.",mode:"verify-before-fix",risk:"guarded",status:"review-required",command:"npx workspai doctor workspace --plan --json",verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",notes:["Read doctor-remediation-plan-last-run.json and execute the matching surface-security-hygiene capability before rerunning Readiness.","Do not treat a Readiness refresh as remediation for a source dependency vulnerability."]});let o={analyze:{title:"Refresh analyze evidence",phase:"analysis",command:"npx workspai analyze --strict --json",verify:"npx workspai analyze --strict --json"},readiness:{title:"Refresh release readiness",phase:"release-readiness",command:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",verify:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json"},pipeline:{title:"Rerun governance pipeline",phase:"governance-pipeline",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"},"workspace-run":{title:"Rerun failed workspace stage",phase:"fleet-run",command:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json",verify:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json"},"workspace-verify":{title:"Refresh workspace verify gate",phase:"verification",command:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json",verify:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json"},"doctor-workspace":{title:"Use Doctor remediation plan",phase:"doctor-remediation",command:"npx workspai doctor workspace --plan --json",verify:"npx workspai doctor workspace --json"}}[e.report.artifactKind]??{title:"Refresh artifact evidence",phase:"evidence-refresh",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"};return j({id:`${e.report.cardId}.refresh.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:o.title,order:e.order,phase:o.phase,blocker:e.blocker,summary:"No deterministic file operation is available for this artifact yet; refresh the evidence and continue with the card-specific plan.",mode:e.report.artifactKind==="doctor-workspace"?"verify-before-fix":"run-command",risk:"guarded",status:e.report.artifactKind==="doctor-workspace"?"review-required":"ready",command:o.command,verifyCommand:o.verify,notes:e.report.artifactKind==="doctor-workspace"?["Read doctor-remediation-plan-last-run.json for ordered file-level steps."]:[]})}async function H(e){let t=[a(e,".workspai/reports"),b$1(e,".workspai/reports")],o=[],s=new Set;for(let r of T)for(let i of r.fileNames){let c=(await Promise.all(t.map(n=>b.join(n,i)))).find(n=>existsSync(n));if(!(!c||s.has(`${r.artifactKind}:${i}`))){s.add(`${r.artifactKind}:${i}`);try{let n=await E.readJSON(c),u=m(n);if(!u)continue;o.push({artifactKind:r.artifactKind,cardId:r.cardId,fileName:i,absolutePath:c,payload:u});break}catch{o.push({artifactKind:r.artifactKind,cardId:r.cardId,fileName:i,absolutePath:c,payload:{blockers:[`${r.artifactKind}: report exists but could not be parsed.`]}});break}}}return o}async function re(e){let t=b.resolve(e.workspacePath),o=e.includeAbsolutePaths===true,s=e.ciMode===true,r=new Date().toISOString(),i=a(t,".workspai/reports"),c=await H(t),n=[],u=1;for(let a of c){if(a.artifactKind==="doctor-workspace"){let y=Array.isArray(a.payload.steps)?q({report:a,workspacePath:t,includeAbsolutePaths:o,startOrder:u}):W({report:a,workspacePath:t,includeAbsolutePaths:o,startOrder:u});n.push(...y),u+=y.length;continue}let d=V(a);if(d.length===0)continue;if(a.artifactKind==="bootstrap-compliance"){n.push(...J({blockers:d,generatedAt:r})),u=n.length+1;continue}let f=n.some(y=>y.transaction?.kind==="dependency-security"),h=a.artifactKind==="readiness"&&d.some(y=>/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(y));if(f&&h)continue;let g=d[0],l=L({report:a,blocker:g,order:u,ciMode:s});d.length>1&&l.notes.push(...d.slice(1,8).map(y=>`Related blocker: ${y}`)),n.push(l),u+=1;}let p={safe:n.filter(a=>a.risk==="safe").length,guarded:n.filter(a=>a.risk==="guarded").length,invasive:n.filter(a=>a.risk==="invasive").length};return {schemaVersion:a$1,generatedAt:r,workspace:{name:b.basename(t),...o?{path:t}:{}},source:{command:"workspace remediation-plan",reportsDir:P(t,i,o),includeAbsolutePaths:o,ciMode:s},summary:{artifactsScanned:c.length,cardsCovered:v(n.map(a=>a.cardId)).length,totalActions:n.length,executableActions:n.filter(a=>a.status==="ready").length,risk:p},actions:n}}async function ae(e$1,t){return e(t,".workspai/reports/artifact-remediation-plan-last-run.json",e$1)}export{re as buildArtifactRemediationPlan,ae as writeArtifactRemediationPlan};
@@ -0,0 +1 @@
1
+ export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-FRJYAJH6.js';
@@ -0,0 +1 @@
1
+ import {a as a$1}from'./chunk-GR6442P7.js';import {j,a,b as b$1,t}from'./chunk-MOSXTVPU.js';import {promises}from'fs';import c from'path';var v=new Set(["node_modules","dist","build","target","coverage","htmlcov",".workspai",".rapidkit",".venv"]);function b(t,r){if(r.has(t)||a$1(t))return true;let i=t.toLowerCase();return !!(i==="dist"||i.startsWith("dist-")||i.startsWith("dist_")||i==="build"||i.startsWith("build-")||i.startsWith("build_"))}async function D(t){try{return await promises.access(t),true}catch{return false}}async function w(t$1){for(let r of t(t$1,"context.json"))if(await D(r))return true;for(let r of t(t$1,"project.json"))if(await D(r))return true;return false}async function M(t,r){let i=[],o=[c.resolve(t)],u=new Set,P=r?.skipDirs??v,g=r?.includeHiddenDirs===true,y=r?.descendIntoMatchedProjects!==false,j$1=r?.isProjectDir??w,d=c.resolve(t);for(;o.length>0;){let e=o.shift();if(!e||u.has(e)||(u.add(e),e!==d&&j(e))||await j$1(e,d)&&(i.push(e),!y))continue;let s=[];try{s=await promises.readdir(e,{withFileTypes:true});}catch{continue}for(let n of s)n.isDirectory()&&(!g&&n.name.startsWith(".")||b(n.name,P)||n.name===a||n.name===b$1||o.push(c.join(e,n.name)));}return i.sort((e,s)=>e.localeCompare(s))}export{M as a};
@@ -0,0 +1,5 @@
1
+ import {a as a$1}from'./chunk-GR6442P7.js';import a from'fs';import o from'path';var f={nextjs:{key:"nextjs",runtime:"node",displayName:"Next.js",supportTier:"extended",importStack:"nextjs",aliases:["next","nextjs","next.js"],dependencyHints:["next"],scriptHints:["next dev","next build","next start"],fileHints:["next.config.js","next.config.mjs","next.config.ts"]},remix:{key:"remix",runtime:"node",displayName:"Remix",supportTier:"extended",importStack:"remix",aliases:["remix"],dependencyHints:["@remix-run/react","@remix-run/node","@remix-run/dev"],scriptHints:["remix dev","remix vite:dev"],fileHints:["remix.config.js","remix.config.mjs"]},nuxt:{key:"nuxt",runtime:"node",displayName:"Nuxt",supportTier:"extended",importStack:"nuxt",aliases:["nuxt","nuxtjs","nuxt.js"],dependencyHints:["nuxt","nuxt3"],scriptHints:["nuxt dev","nuxt build","nuxi dev","nuxi build"],fileHints:["nuxt.config.js","nuxt.config.ts","nuxt.config.mjs"]},react:{key:"react",runtime:"node",displayName:"React",supportTier:"extended",importStack:"react",aliases:["react"],dependencyHints:["react","react-dom"],scriptHints:["react-scripts start","react-scripts build"],fileHints:[]},vite:{key:"vite",runtime:"node",displayName:"Vite",supportTier:"extended",importStack:"vite",aliases:["vite"],dependencyHints:["vite"],scriptHints:["vite","vite dev","vite build"],fileHints:["vite.config.js","vite.config.ts","vite.config.mjs"]},vue:{key:"vue",runtime:"node",displayName:"Vue",supportTier:"extended",importStack:"vue",aliases:["vue","vuejs","vue.js"],dependencyHints:["vue","@vue/cli-service"],scriptHints:["vue-cli-service serve","vue-cli-service build"],fileHints:["vue.config.js"]},sveltekit:{key:"sveltekit",runtime:"node",displayName:"SvelteKit",supportTier:"extended",importStack:"sveltekit",aliases:["sveltekit","svelte-kit"],dependencyHints:["@sveltejs/kit"],scriptHints:["svelte-kit dev","svelte-kit build"],fileHints:["svelte.config.js"]},svelte:{key:"svelte",runtime:"node",displayName:"Svelte",supportTier:"extended",importStack:"svelte",aliases:["svelte"],dependencyHints:["svelte"],scriptHints:["svelte"],fileHints:[]},angular:{key:"angular",runtime:"node",displayName:"Angular",supportTier:"extended",importStack:"angular",aliases:["angular","@angular/core"],dependencyHints:["@angular/core","@angular/cli"],scriptHints:["ng serve","ng build"],fileHints:["angular.json"]},astro:{key:"astro",runtime:"node",displayName:"Astro",supportTier:"extended",importStack:"astro",aliases:["astro"],dependencyHints:["astro"],scriptHints:["astro dev","astro build"],fileHints:["astro.config.js","astro.config.ts","astro.config.mjs"]},solid:{key:"solid",runtime:"node",displayName:"Solid",supportTier:"extended",importStack:"solid",aliases:["solid","solidjs","solid-js"],dependencyHints:["solid-js"],scriptHints:[],fileHints:[]},unknown:{key:"unknown",runtime:"unknown",displayName:"Unknown frontend",supportTier:"observed",importStack:"unknown",aliases:["unknown"],dependencyHints:[],scriptHints:[],fileHints:[]}},L={nextjs:{dev:["dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},remix:{dev:["dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},nuxt:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},react:{dev:["dev","start"],start:["serve"],build:["build"],test:["test"],lint:["lint"],format:["format"]},vite:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},vue:{dev:["dev","serve"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},sveltekit:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},svelte:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},angular:{dev:["start","serve"],start:["serve"],build:["build"],test:["test"],lint:["lint"],format:["format"]},astro:{dev:["dev"],start:["start","preview"],build:["build"],test:["test"],lint:["lint"],format:["format"]},solid:{dev:["dev"],start:["preview","start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function ne(e,n){let t=typeof e=="string"?h(e):e;return t==="unknown"?[]:L[t]?.[n]??[]}function _(e){try{return a.existsSync(e)?JSON.parse(a.readFileSync(e,"utf8")):null}catch{return null}}function A(e){let n=_(o.join(e,"package.json"));if(!n)return {dependencies:{},scriptText:""};let t={...n.dependencies??{},...n.devDependencies??{},...n.peerDependencies??{}},i=n.scripts??{},s=Object.values(i).filter(u=>typeof u=="string").join(" ").toLowerCase();return {dependencies:t,scriptText:s}}function I(e,n){return n.some(t=>a.existsSync(o.join(e,t)))}function j(e){return e.vite?e.react||e["react-dom"]||e["@vitejs/plugin-react"]?"react":e.vue||e["@vitejs/plugin-vue"]?"vue":e.svelte||e["@sveltejs/vite-plugin-svelte"]?"svelte":e["solid-js"]||e["vite-plugin-solid"]?"solid":null:null}function p(e,n,t){let i=f[e]??f.unknown;return {key:i.key,runtime:i.runtime,displayName:i.displayName,supportTier:i.supportTier,importStack:i.importStack,confidence:n,source:t}}function te(e){return f[e]??f.unknown}function h(e){let n=(e??"").trim().toLowerCase().replace(/[_\s]+/g,"-");if(!n)return "unknown";for(let t of Object.values(f))if(t.aliases.includes(n))return t.key;return "unknown"}function N(e,n){let t=h(typeof n?.framework=="string"?n.framework:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0);if(t!=="unknown")return p(t,"high","framework");let{dependencies:i,scriptText:s}=A(e);for(let u of ["nextjs","remix","nuxt","sveltekit","angular","astro","vue","solid","vite","react","svelte"]){let d=f[u];if(d.dependencyHints.some(c=>i[c])){if(u==="vite"){let c=j(i);if(c)return p(c,"high","manifest")}return p(u,"high","manifest")}if(d.fileHints.length>0&&I(e,d.fileHints)){if(u==="vite"){let c=j(i);if(c)return p(c,"high","manifest")}return p(u,"high","manifest")}if(d.scriptHints.some(c=>s.includes(c)))return p(u,"medium","manifest")}return p("unknown","low","unknown")}var y={fastapi:{key:"fastapi",runtime:"python",displayName:"FastAPI",supportTier:"first-class",importStack:"fastapi",aliases:["fastapi"],kitPrefixes:["fastapi"]},django:{key:"django",runtime:"python",displayName:"Django",supportTier:"extended",importStack:"django",aliases:["django"]},flask:{key:"flask",runtime:"python",displayName:"Flask",supportTier:"extended",importStack:"flask",aliases:["flask"]},python:{key:"python",runtime:"python",displayName:"Python",supportTier:"observed",importStack:"unknown",aliases:["python"]},nestjs:{key:"nestjs",runtime:"node",displayName:"NestJS",supportTier:"first-class",importStack:"nestjs",aliases:["nestjs","nest"],kitPrefixes:["nestjs"]},nextjs:{key:"nextjs",runtime:"node",displayName:"Next.js",supportTier:"extended",importStack:"nextjs",aliases:["nextjs","next.js","next"]},remix:{key:"remix",runtime:"node",displayName:"Remix",supportTier:"extended",importStack:"remix",aliases:["remix"]},nuxt:{key:"nuxt",runtime:"node",displayName:"Nuxt",supportTier:"extended",importStack:"nuxt",aliases:["nuxt","nuxtjs","nuxt.js"]},react:{key:"react",runtime:"node",displayName:"React",supportTier:"extended",importStack:"react",aliases:["react"]},vite:{key:"vite",runtime:"node",displayName:"Vite",supportTier:"extended",importStack:"vite",aliases:["vite"]},vue:{key:"vue",runtime:"node",displayName:"Vue",supportTier:"extended",importStack:"vue",aliases:["vue","vuejs","vue.js"]},sveltekit:{key:"sveltekit",runtime:"node",displayName:"SvelteKit",supportTier:"extended",importStack:"sveltekit",aliases:["sveltekit","svelte-kit"]},svelte:{key:"svelte",runtime:"node",displayName:"Svelte",supportTier:"extended",importStack:"svelte",aliases:["svelte"]},angular:{key:"angular",runtime:"node",displayName:"Angular",supportTier:"extended",importStack:"angular",aliases:["angular","@angular/core"]},astro:{key:"astro",runtime:"node",displayName:"Astro",supportTier:"extended",importStack:"astro",aliases:["astro"]},solid:{key:"solid",runtime:"node",displayName:"Solid",supportTier:"extended",importStack:"solid",aliases:["solid","solidjs","solid-js"]},express:{key:"express",runtime:"node",displayName:"Express",supportTier:"extended",importStack:"express",aliases:["express"]},fastify:{key:"fastify",runtime:"node",displayName:"Fastify",supportTier:"extended",importStack:"unknown",aliases:["fastify"]},koa:{key:"koa",runtime:"node",displayName:"Koa",supportTier:"extended",importStack:"koa",aliases:["koa"]},node:{key:"node",runtime:"node",displayName:"Node.js",supportTier:"observed",importStack:"unknown",aliases:["node","nodejs","typescript","javascript"]},gofiber:{key:"gofiber",runtime:"go",displayName:"Go/Fiber",supportTier:"extended",importStack:"go",aliases:["gofiber","fiber","go-fiber","go/fiber"],kitPrefixes:["gofiber"]},gogin:{key:"gogin",runtime:"go",displayName:"Go/Gin",supportTier:"extended",importStack:"go",aliases:["gogin","gin","go-gin","go/gin"],kitPrefixes:["gogin"]},echo:{key:"echo",runtime:"go",displayName:"Echo",supportTier:"extended",importStack:"go",aliases:["echo"]},go:{key:"go",runtime:"go",displayName:"Go",supportTier:"observed",importStack:"go",aliases:["go","golang"],kitPrefixes:["go"]},springboot:{key:"springboot",runtime:"java",displayName:"Spring Boot",supportTier:"extended",importStack:"springboot",aliases:["springboot","spring","spring-boot"],kitPrefixes:["springboot"]},java:{key:"java",runtime:"java",displayName:"Java",supportTier:"observed",importStack:"unknown",aliases:["java"]},laravel:{key:"laravel",runtime:"php",displayName:"Laravel",supportTier:"extended",importStack:"unknown",aliases:["laravel"]},symfony:{key:"symfony",runtime:"php",displayName:"Symfony",supportTier:"extended",importStack:"unknown",aliases:["symfony"]},php:{key:"php",runtime:"php",displayName:"PHP",supportTier:"observed",importStack:"unknown",aliases:["php"]},rails:{key:"rails",runtime:"ruby",displayName:"Ruby on Rails",supportTier:"extended",importStack:"rails",aliases:["rails","ruby-on-rails","ruby on rails"]},sinatra:{key:"sinatra",runtime:"ruby",displayName:"Sinatra",supportTier:"extended",importStack:"unknown",aliases:["sinatra"]},ruby:{key:"ruby",runtime:"ruby",displayName:"Ruby",supportTier:"observed",importStack:"unknown",aliases:["ruby"]},dotnet:{key:"dotnet",runtime:"dotnet",displayName:"ASP.NET Core",supportTier:"extended",importStack:"dotnet",aliases:["dotnet","asp.net","aspnet","asp.net core","csharp","c#"],kitPrefixes:["dotnet","aspnet","aspnetcore"]},actix:{key:"actix",runtime:"rust",displayName:"Actix-web",supportTier:"extended",importStack:"unknown",aliases:["actix","actix-web"]},axum:{key:"axum",runtime:"rust",displayName:"Axum",supportTier:"extended",importStack:"unknown",aliases:["axum"]},rocket:{key:"rocket",runtime:"rust",displayName:"Rocket",supportTier:"extended",importStack:"unknown",aliases:["rocket"]},rust:{key:"rust",runtime:"rust",displayName:"Rust",supportTier:"observed",importStack:"unknown",aliases:["rust"]},phoenix:{key:"phoenix",runtime:"elixir",displayName:"Phoenix",supportTier:"extended",importStack:"unknown",aliases:["phoenix"]},elixir:{key:"elixir",runtime:"elixir",displayName:"Elixir",supportTier:"observed",importStack:"unknown",aliases:["elixir"]},clojure:{key:"clojure",runtime:"clojure",displayName:"Clojure",supportTier:"extended",importStack:"unknown",aliases:["clojure"]},scala:{key:"scala",runtime:"scala",displayName:"Scala",supportTier:"extended",importStack:"unknown",aliases:["scala"]},kotlin:{key:"kotlin",runtime:"kotlin",displayName:"Kotlin",supportTier:"extended",importStack:"unknown",aliases:["kotlin"]},deno:{key:"deno",runtime:"deno",displayName:"Deno",supportTier:"extended",importStack:"unknown",aliases:["deno"]},bun:{key:"bun",runtime:"bun",displayName:"Bun",supportTier:"extended",importStack:"unknown",aliases:["bun"]},tauri:{key:"tauri",runtime:"node",displayName:"Tauri",supportTier:"extended",importStack:"unknown",aliases:["tauri","tauri-app"],kitPrefixes:["desktop.tauri"]},electron:{key:"electron",runtime:"node",displayName:"Electron",supportTier:"extended",importStack:"unknown",aliases:["electron","electron-forge"],kitPrefixes:["desktop.electron"]},"vscode-extension":{key:"vscode-extension",runtime:"node",displayName:"VS Code Extension",supportTier:"extended",importStack:"unknown",aliases:["vscode-extension","visual-studio-code-extension"],kitPrefixes:["extension.vscode"]},c:{key:"c",runtime:"c",displayName:"C",supportTier:"observed",importStack:"unknown",aliases:["c","clang","gcc"]},cpp:{key:"cpp",runtime:"cpp",displayName:"C++",supportTier:"observed",importStack:"unknown",aliases:["cpp","c++","cplusplus","cc","clang++","g++"]},unknown:{key:"unknown",runtime:"unknown",displayName:"Unknown",supportTier:"observed",importStack:"unknown",aliases:["unknown"]}},B=new Map;for(let e of Object.values(y))for(let n of e.aliases)B.set(n,e.key);function r(e,n,t){let i=y[e]??y.unknown;return {key:i.key,runtime:i.runtime,displayName:i.displayName,supportTier:i.supportTier,importStack:i.importStack,confidence:n,source:t}}function R(e){return e.trim().toLowerCase().replace(/[_\s]+/g,"-")}function l(e){try{return a.existsSync(e)?a.readFileSync(e,"utf8").toLowerCase():""}catch{return ""}}function C(e){try{return a.existsSync(e)?JSON.parse(a.readFileSync(e,"utf8")):null}catch{return null}}var O=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","venv","node_modules","vendor","dist","build","target","coverage",".next",".cache"]);function b(e,n){if(n<0||!a.existsSync(e))return [];let t=[],i=[];try{i=a.readdirSync(e,{withFileTypes:true});}catch{return []}for(let s of i){let u=o.join(e,s.name);s.isDirectory()?t.push(...b(u,n-1)):t.push(u);}return t}function H(e,n){if(n<0||!a.existsSync(e))return [];let t=[];try{t=a.readdirSync(e,{withFileTypes:true});}catch{return []}let i=[];for(let s of t){let u=o.join(e,s.name);if(s.isDirectory()){if(O.has(s.name)||a$1(s.name))continue;i.push(...H(u,n-1));}else i.push(u);}return i}function m(e,n,t=2){return b(e,t).some(i=>i.toLowerCase().endsWith(n.toLowerCase()))}function T(e,n,t=2){return b(e,t).filter(i=>i.toLowerCase().endsWith(n.toLowerCase()))}function G(e){let n=R(e??"");if(!n)return "unknown";for(let t of Object.values(y))if(t.kitPrefixes?.some(i=>n.startsWith(i)))return t.key;return "unknown"}function g(e){return e?B.get(R(e))??"unknown":"unknown"}function de(e){return g(e)}function ce(e){let n=g(e);return n!=="unknown"?y[n].runtime:"unknown"}function V(e){let n=G(e.kitName);if(n!=="unknown")return r(n,"high","kit");let t=g(e.framework);if(t!=="unknown")return r(t,"high","framework");let i=g(e.runtime);return i!=="unknown"?r(i,"medium","runtime"):r("unknown","low","unknown")}function z(e){let n=C(o.join(e,"package.json"));if(!n)return r("unknown","low","unknown");let t={...n.dependencies??{},...n.devDependencies??{}},i=n.scripts??{},s=Object.values(i).filter(u=>typeof u=="string").join(" ").toLowerCase();return t["@nestjs/core"]||s.includes("nest start")?r("nestjs","high","manifest"):t.express?r("express","high","manifest"):t.fastify?r("fastify","high","manifest"):t.koa?r("koa","high","manifest"):r("node","medium","marker")}function q(e){let n=C(o.join(e,"package.json"));if(!n)return r("unknown","low","unknown");let t={...n.dependencies??{},...n.devDependencies??{}},i=n.engines??{},s=n.scripts??{},u=Object.values(s).filter(d=>typeof d=="string").join(" ").toLowerCase();return t["@tauri-apps/api"]||t["@tauri-apps/cli"]||a.existsSync(o.join(e,"src-tauri","Cargo.toml"))?r("tauri","high","manifest"):t.electron||t["@electron-forge/cli"]||u.includes("electron-forge")||u.includes("electron ")?r("electron","high","manifest"):typeof i.vscode=="string"&&(n.activationEvents!==void 0||n.contributes!==void 0)?r("vscode-extension","high","manifest"):r("unknown","low","unknown")}function M(e){let n=[l(o.join(e,"pyproject.toml")),l(o.join(e,"requirements.txt")),l(o.join(e,"requirements.in"))].join(`
2
+ `);return n.includes("fastapi")?r("fastapi","high","manifest"):n.includes("django")?r("django","high","manifest"):n.includes("flask")?r("flask","high","manifest"):n.trim()?r("python","medium","marker"):r("unknown","low","unknown")}function W(e){let n=[l(o.join(e,"go.mod")),l(o.join(e,"main.go"))].join(`
3
+ `);return n.includes("github.com/gofiber/fiber")?r("gofiber","high","manifest"):n.includes("github.com/gin-gonic/gin")?r("gogin","high","manifest"):n.includes("github.com/labstack/echo")?r("echo","high","manifest"):n.trim()?r("go","medium","marker"):r("unknown","low","unknown")}function P(e){let n=[l(o.join(e,"pom.xml")),l(o.join(e,"build.gradle")),l(o.join(e,"build.gradle.kts"))].join(`
4
+ `);return n.includes("spring-boot")||n.includes("org.springframework")?r("springboot","high","manifest"):n.trim()?r("java","medium","marker"):r("unknown","low","unknown")}function U(e){let n=l(o.join(e,"composer.json"));return n.includes("laravel/framework")?r("laravel","high","manifest"):n.includes("symfony/")?r("symfony","high","manifest"):n.trim()?r("php","medium","marker"):r("unknown","low","unknown")}function Y(e){let n=l(o.join(e,"Gemfile"));return n.includes("gem 'rails'")||n.includes('gem "rails"')?r("rails","high","manifest"):n.includes("gem 'sinatra'")||n.includes('gem "sinatra"')?r("sinatra","high","manifest"):n.trim()?r("ruby","medium","marker"):r("unknown","low","unknown")}function Q(e){let t=[...T(e,".csproj",3),...T(e,".sln",2)].map(i=>l(i)).join(`
5
+ `);return t.includes("microsoft.net.sdk.web")||t.includes("microsoft.aspnetcore")||t.includes("swashbuckle.aspnetcore")?r("dotnet","high","manifest"):t.trim()?r("dotnet","medium","marker"):r("unknown","low","unknown")}function X(e){let n=l(o.join(e,"Cargo.toml"));return n.includes("actix-web")?r("actix","high","manifest"):n.includes("axum")?r("axum","high","manifest"):n.includes("rocket")?r("rocket","high","manifest"):n.trim()?r("rust","medium","marker"):r("unknown","low","unknown")}function Z(e){let n=l(o.join(e,"mix.exs"));return n.includes("phoenix")?r("phoenix","high","manifest"):n.trim()?r("elixir","medium","marker"):r("unknown","low","unknown")}function $(e){let n=[],t=i=>{n.includes(i)||n.push(i);};return a.existsSync(o.join(e,"go.mod"))&&t("go"),(a.existsSync(o.join(e,"Cargo.toml"))||a.existsSync(o.join(e,"src-tauri","Cargo.toml")))&&t("rust"),(a.existsSync(o.join(e,"pom.xml"))||a.existsSync(o.join(e,"build.gradle"))||a.existsSync(o.join(e,"build.gradle.kts")))&&t("java"),a.existsSync(o.join(e,"mix.exs"))&&t("elixir"),a.existsSync(o.join(e,"composer.json"))&&t("php"),(m(e,".csproj")||m(e,".sln"))&&t("dotnet"),a.existsSync(o.join(e,"package.json"))&&t("node"),a.existsSync(o.join(e,"Gemfile"))&&t("ruby"),(a.existsSync(o.join(e,"pyproject.toml"))||a.existsSync(o.join(e,"setup.py"))||a.existsSync(o.join(e,"requirements.txt"))||a.existsSync(o.join(e,"requirements.in")))&&t("python"),(a.existsSync(o.join(e,"deps.edn"))||a.existsSync(o.join(e,"project.clj")))&&t("clojure"),a.existsSync(o.join(e,"build.sbt"))&&t("scala"),(a.existsSync(o.join(e,"deno.json"))||a.existsSync(o.join(e,"deno.jsonc")))&&t("deno"),(a.existsSync(o.join(e,"bun.lockb"))||a.existsSync(o.join(e,"bun.lock")))&&t("bun"),(a.existsSync(o.join(e,"CMakeLists.txt"))||a.existsSync(o.join(e,"meson.build"))||m(e,".cpp",3)||m(e,".cc",3)||m(e,".cxx",3)||m(e,".hpp",3)||m(e,".hh",3)||m(e,".hxx",3))&&t("cpp"),(m(e,".c",3)||m(e,".h",3))&&t("c"),(a.existsSync(o.join(e,"settings.gradle.kts"))||m(o.join(e,"src"),".kt",3))&&t("kotlin"),n}function le(e,n=4){let t=H(e,Math.max(0,Math.min(12,n))),i=new Set(t.map(k=>o.basename(k))),s=t.map(k=>k.toLowerCase()),u=[],d=k=>{u.includes(k)||u.push(k);},c=(...k)=>k.some(w=>i.has(w)),x=(...k)=>s.some(w=>k.some(K=>w.endsWith(K)));return c("go.mod")&&d("go"),c("Cargo.toml")&&d("rust"),c("pom.xml","build.gradle","build.gradle.kts")&&d("java"),c("mix.exs")&&d("elixir"),c("composer.json")&&d("php"),x(".csproj",".sln")&&d("dotnet"),c("package.json")&&d("node"),c("Gemfile")&&d("ruby"),c("pyproject.toml","setup.py","requirements.txt","requirements.in")&&d("python"),c("deps.edn","project.clj")&&d("clojure"),c("build.sbt")&&d("scala"),c("deno.json","deno.jsonc")&&d("deno"),c("bun.lockb","bun.lock")&&d("bun"),(c("CMakeLists.txt","meson.build")||x(".cpp",".cc",".cxx",".hpp",".hh",".hxx"))&&d("cpp"),x(".c",".h")&&d("c"),(c("settings.gradle.kts")||x(".kt"))&&d("kotlin"),u}function me(e,n){let t=V({framework:typeof n?.framework=="string"?n.framework:void 0,runtime:typeof n?.runtime=="string"?n.runtime:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0});if(t.key!=="unknown")return t;let i=$(e);if(i.includes("node")){let s=q(e);if(s.key!=="unknown")return s;let u=N(e,n);if(u.key!=="unknown")return u;let d=z(e);if(d.key!=="unknown")return d}if(i.includes("python")){let s=M(e);if(s.key!=="unknown")return s}if(i.includes("go")){let s=W(e);if(s.key!=="unknown")return s}if(i.includes("java")){let s=P(e);if(s.key!=="unknown")return s}if(i.includes("php")){let s=U(e);if(s.key!=="unknown")return s}if(i.includes("ruby")){let s=Y(e);if(s.key!=="unknown")return s}if(i.includes("rust")){let s=X(e);if(s.key!=="unknown")return s}if(i.includes("elixir")){let s=Z(e);if(s.key!=="unknown")return s}if(i.includes("dotnet")){let s=Q(e);if(s.key!=="unknown")return s}return i.includes("clojure")?r("clojure","medium","marker"):i.includes("scala")?r("scala","medium","marker"):i.includes("kotlin")?r("kotlin","medium","marker"):i.includes("deno")?r("deno","high","marker"):i.includes("bun")?r("bun","high","marker"):i.includes("cpp")?r("cpp","medium","marker"):i.includes("c")?r("c","medium","marker"):i.length>0?r(g(i[0]),"medium","runtime"):r("unknown","low","unknown")}export{ne as a,te as b,h as c,N as d,de as e,ce as f,V as g,$ as h,le as i,me as j};
@@ -1 +1 @@
1
- import {a as a$1}from'./chunk-AHLMIL2T.js';var r=".workspai/skills";var e=a$1.skillsIndex,a=a$1.explain,_=".workspai/reports/workspace-why-last-run.json",c=".workspai/reports/workspace-trace-last-run.json",O=".workspai/AGENT-GROUNDING.md",P=".rapidkit/AGENT-GROUNDING.md",I=".cursor/rules/workspai-grounding.mdc",A=".cursor/rules/rapidkit-grounding.mdc",T=".claude/rules/workspai-evidence.md",E=".claude/rules/rapidkit-evidence.md",R=".github/instructions/workspai-workspace.instructions.md",L=".github/instructions/rapidkit-workspace.instructions.md",d=".github/instructions/workspai-evidence.instructions.md",S=".github/instructions/rapidkit-evidence.instructions.md",C=".github/prompts/workspai-diagnose.prompt.md",k=".github/prompts/rapidkit-diagnose.prompt.md",l=".github/prompts/workspai-repair.prompt.md",m=".github/prompts/rapidkit-repair.prompt.md",N=".github/prompts/workspai-release-readiness.prompt.md",u=".github/prompts/rapidkit-release-readiness.prompt.md",g=".github/prompts/workspai-project-onboard.prompt.md",K=".github/prompts/rapidkit-project-onboard.prompt.md",G=".github/prompts/workspai-adopt-project.prompt.md",w=".github/prompts/rapidkit-adopt-project.prompt.md",x=".github/skills/workspai-grounding/SKILL.md",H=".github/skills/rapidkit-grounding/SKILL.md",D=".github/skills/workspai-workspace-intelligence/SKILL.md",W=".github/skills/rapidkit-workspace-intelligence/SKILL.md",h=".workspai/reports/workspai-mcp-design.json",U=".workspai/reports/rapidkit-mcp-design.json",b=".vscode/workspai-agent-hooks.json",Y=".vscode/rapidkit-agent-hooks.json";function M(t){let s=t.trim();if(!s||s.includes("..")||s.includes("/"))throw new Error(`Invalid operational skill id: ${t}`);return `${r}/${s}.md`}var f={"workspai-diagnose-api-failure":"workspai-diagnose","workspai-release-readiness":"workspai-release-readiness","workspai-safe-schema-migration":"workspai-safe-schema-migration","workspai-dependency-upgrade":"workspai-dependency-upgrade","workspai-rename-contract":"workspai-rename-contract"};export{H as A,D as B,W as C,h as D,U as E,b as F,Y as G,M as H,f as I,r as a,e as b,a as c,_ as d,c as e,O as f,P as g,I as h,A as i,T as j,E as k,R as l,L as m,d as n,S as o,C as p,k as q,l as r,m as s,N as t,u,g as v,K as w,G as x,w as y,x as z};
1
+ import {a as a$1}from'./chunk-62K2H72S.js';var r=".workspai/skills";var e=a$1.skillsIndex,a=a$1.explain,_=".workspai/reports/workspace-why-last-run.json",c=".workspai/reports/workspace-trace-last-run.json",O=".workspai/AGENT-GROUNDING.md",P=".rapidkit/AGENT-GROUNDING.md",I=".cursor/rules/workspai-grounding.mdc",A=".cursor/rules/rapidkit-grounding.mdc",T=".claude/rules/workspai-evidence.md",E=".claude/rules/rapidkit-evidence.md",R=".github/instructions/workspai-workspace.instructions.md",L=".github/instructions/rapidkit-workspace.instructions.md",d=".github/instructions/workspai-evidence.instructions.md",S=".github/instructions/rapidkit-evidence.instructions.md",C=".github/prompts/workspai-diagnose.prompt.md",k=".github/prompts/rapidkit-diagnose.prompt.md",l=".github/prompts/workspai-repair.prompt.md",m=".github/prompts/rapidkit-repair.prompt.md",N=".github/prompts/workspai-release-readiness.prompt.md",u=".github/prompts/rapidkit-release-readiness.prompt.md",g=".github/prompts/workspai-project-onboard.prompt.md",K=".github/prompts/rapidkit-project-onboard.prompt.md",G=".github/prompts/workspai-adopt-project.prompt.md",w=".github/prompts/rapidkit-adopt-project.prompt.md",x=".github/skills/workspai-grounding/SKILL.md",H=".github/skills/rapidkit-grounding/SKILL.md",D=".github/skills/workspai-workspace-intelligence/SKILL.md",W=".github/skills/rapidkit-workspace-intelligence/SKILL.md",h=".workspai/reports/workspai-mcp-design.json",U=".workspai/reports/rapidkit-mcp-design.json",b=".vscode/workspai-agent-hooks.json",Y=".vscode/rapidkit-agent-hooks.json";function M(t){let s=t.trim();if(!s||s.includes("..")||s.includes("/"))throw new Error(`Invalid operational skill id: ${t}`);return `${r}/${s}.md`}var f={"workspai-diagnose-api-failure":"workspai-diagnose","workspai-release-readiness":"workspai-release-readiness","workspai-safe-schema-migration":"workspai-safe-schema-migration","workspai-dependency-upgrade":"workspai-dependency-upgrade","workspai-rename-contract":"workspai-rename-contract"};export{H as A,D as B,W as C,h as D,U as E,b as F,Y as G,M as H,f as I,r as a,e as b,a as c,_ as d,c as e,O as f,P as g,I as h,A as i,T as j,E as k,R as l,L as m,d as n,S as o,C as p,k as q,l as r,m as s,N as t,u,g as v,K as w,G as x,w as y,x as z};
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-2OIBHUVH.js';import {a as a$1}from'./chunk-GR6442P7.js';import {f,e}from'./chunk-MBRU3VWJ.js';import {createHash}from'crypto';import c from'path';import {execa}from'execa';import u from'fs-extra';var L="workspai.project-test-coverage.v1",k=".workspai/reports/project-test-coverage-last-run.json",I=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","deno.json","deno.jsonc"];function p(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function g(e,t,o=0){let n=p(e),r=Math.min(p(t),n),i=p(o);return {total:n,covered:r,skipped:i,percent:n>0?Math.round(r/n*1e4)/100:null}}function S(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e;return g(t.total,t.covered,t.skipped)}function y(e,t){let o=c.isAbsolute(t)?t:c.resolve(e,t),n=c.relative(e,o);return n&&!n.startsWith("..")?n.split(c.sep).join("/"):t}async function x(e){return createHash("sha256").update(await u.readFile(e)).digest("hex")}async function $(e){let t=c.resolve(e);for(;;){if(await u.pathExists(c.join(t,".workspai","project.json"))||await u.pathExists(c.join(t,".rapidkit","project.json"))||(await Promise.all(I.map(r=>u.pathExists(c.join(t,r))))).some(Boolean))return t;let n=c.dirname(t);if(n===t)return c.resolve(e);t=n;}}async function V(e){if(await u.pathExists(c.join(e,"deno.json"))||await u.pathExists(c.join(e,"deno.jsonc")))return "deno";if(await u.pathExists(c.join(e,"bun.lock"))||await u.pathExists(c.join(e,"bun.lockb")))return "bun";if(await u.pathExists(c.join(e,"package.json")))return "node";if(await u.pathExists(c.join(e,"pyproject.toml"))||await u.pathExists(c.join(e,"requirements.txt")))return "python";if(await u.pathExists(c.join(e,"go.mod")))return "go";let t=await u.pathExists(c.join(e,"pom.xml"))||await u.pathExists(c.join(e,"build.gradle"))||await u.pathExists(c.join(e,"build.gradle.kts"));return t&&(await P(e,o=>o.endsWith(".kt")||o.endsWith(".kts")&&o!=="build.gradle.kts"&&o!=="settings.gradle.kts",4)).length>0?"kotlin":t?"java":await u.pathExists(c.join(e,"Cargo.toml"))?"rust":await u.pathExists(c.join(e,"composer.json"))?"php":await u.pathExists(c.join(e,"Gemfile"))?"ruby":await u.pathExists(c.join(e,"mix.exs"))?"elixir":await u.pathExists(c.join(e,"deps.edn"))||await u.pathExists(c.join(e,"project.clj"))?"clojure":await u.pathExists(c.join(e,"build.sbt"))?"scala":await u.pathExists(c.join(e,"CMakeLists.txt"))?(await P(e,n=>/\.(c|cc|cpp|cxx)$/.test(n),3)).some(n=>/\.(cc|cpp|cxx)$/.test(n))?"cpp":"c":(await P(e,o=>/\.(sln|csproj)$/.test(o),2)).length>0?"dotnet":"unknown"}async function P(e,t,o=5){let n=[],r=[{dir:e,depth:0}],i=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;r.length>0;){let s=r.shift();if(!s)break;let a=await u.readdir(s.dir,{withFileTypes:true}).catch(()=>[]);for(let l of a){if(i.has(l.name)||a$1(l.name))continue;let d=c.join(s.dir,l.name),m=c.relative(e,d).split(c.sep).join("/");l.isFile()&&t(l.name,m)&&n.push(d),l.isDirectory()&&s.depth<o&&r.push({dir:d,depth:s.depth+1});}}return n}async function W(e,t){let o=await u.readJson(t),n=o.total??o,r={};for(let s of ["lines","branches","functions","statements"]){let a=S(n[s]);a&&(r[s]=a);}let i=[];for(let[s,a]of Object.entries(o)){if(s==="total"||!a||typeof a!="object"||Array.isArray(a))continue;let l=a,d={};for(let m of ["lines","branches","functions","statements"]){let b=S(l[m]);b&&(d[m]=b);}i.push({path:y(e,s),metrics:d});}return {metrics:r,files:i,source:{format:"istanbul-json",path:t,sha256:await x(t)}}}async function H(e,t){let o=await u.readJson(t),n=o.totals??{},r={lines:g(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(r.branches=g(n.num_branches,n.covered_branches));let i=[];for(let[s,a]of Object.entries(o.files??{})){let l=a?.summary??{};i.push({path:y(e,s),metrics:{lines:g(l.num_statements,l.covered_lines),...p(l.num_branches)>0?{branches:g(l.num_branches,l.covered_branches)}:{}}});}return {metrics:r,files:i,source:{format:"coverage-py-json",path:t,sha256:await x(t)}}}function j(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,o=p(t.count),n=p(t.covered);return o>0?g(o,n):void 0}async function D(e,t){let o=await u.readJson(t),n=Array.isArray(o.data)?o.data[0]??{}:o,r=n.totals??{},i={};i.lines=j(r.lines),i.functions=j(r.functions),i.branches=j(r.branches),i.statements=j(r.regions);let s=[];for(let a of Array.isArray(n.files)?n.files:[]){if(!a||typeof a!="object"||Array.isArray(a))continue;let l=a,d=l.summary??{};s.push({path:y(e,String(l.filename??"unknown")),metrics:{lines:j(d.lines),functions:j(d.functions),branches:j(d.branches),statements:j(d.regions)}});}return {metrics:i,files:s,source:{format:"llvm-cov-json",path:t,sha256:await x(t)}}}async function M(e,t){let o=await u.readFile(t,"utf8"),n=[],r="",i=0,s=0,a=0,l=0,d=0,m=0,b=v=>{r&&(n.push({path:y(e,r),metrics:{lines:g(v.lineTotal,v.lineCovered),functions:g(v.functionTotal,v.functionCovered),branches:g(v.branchTotal,v.branchCovered)}}),i+=v.lineTotal,s+=v.lineCovered,a+=v.functionTotal,l+=v.functionCovered,d+=v.branchTotal,m+=v.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let v of o.split(/\r?\n/))v.startsWith("SF:")?r=v.slice(3):v.startsWith("LF:")?h.lineTotal=p(v.slice(3)):v.startsWith("LH:")?h.lineCovered=p(v.slice(3)):v.startsWith("FNF:")?h.functionTotal=p(v.slice(4)):v.startsWith("FNH:")?h.functionCovered=p(v.slice(4)):v.startsWith("BRF:")?h.branchTotal=p(v.slice(4)):v.startsWith("BRH:")?h.branchCovered=p(v.slice(4)):v==="end_of_record"&&(b(h),r="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:g(i,s),functions:g(a,l),branches:g(d,m)},files:n,source:{format:"lcov",path:t,sha256:await x(t)}}}async function G(e,t){let o=await u.readFile(t,"utf8"),n=new Map;for(let s of o.split(/\r?\n/).slice(1)){let a=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(s.trim());if(!a)continue;let l=n.get(a[1])??{total:0,covered:0},d=p(a[2]);l.total+=d,p(a[3])>0&&(l.covered+=d),n.set(a[1],l);}let r=[...n.entries()].map(([s,a])=>({path:y(e,s),metrics:{statements:g(a.total,a.covered)}})),i=[...n.values()].reduce((s,a)=>({total:s.total+a.total,covered:s.covered+a.covered}),{total:0,covered:0});return {metrics:{statements:g(i.total,i.covered)},files:r,source:{format:"go-coverprofile",path:t,sha256:await x(t)}}}function T(e,t){let n=[...e.matchAll(new RegExp(`<counter\\s+type=["']${t}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?g(Number(n[1])+Number(n[2]),n[2]):void 0}async function C(e,t){let o=await u.readFile(e,"utf8"),n={};if(t==="cobertura-xml"){let r=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",i=/\bline-rate=["']([\d.]+)["']/i.exec(r)?.[1],s=/\bbranch-rate=["']([\d.]+)["']/i.exec(r)?.[1];i&&(n.lines=g(1e4,Math.round(Number(i)*1e4))),s&&(n.branches=g(1e4,Math.round(Number(s)*1e4)));}if(t==="clover-xml"){let i=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",s=m=>p(new RegExp(`\\b${m}=["'](\\d+)["']`,"i").exec(i)?.[1]),a=s("statements"),l=s("methods"),d=s("conditionals");a>0&&(n.statements=g(a,s("coveredstatements"))),l>0&&(n.functions=g(l,s("coveredmethods"))),d>0&&(n.branches=g(d,s("coveredconditionals")));}return n.lines??=T(o,"LINE"),n.branches??=T(o,"BRANCH"),n.functions??=T(o,"METHOD"),n.statements??=T(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:t,path:e,sha256:await x(e)}}}async function q(e){let t=await u.readFile(e,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(t)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),r=n("statement-count"),i=n("statements-invoked"),s=n("branch-count"),a=n("branches-invoked"),l=n("statement-rate"),d=n("branch-rate"),m={};return r>0?m.statements=g(r,i):l>0&&(m.statements=g(1e4,Math.round(l*100))),s>0?m.branches=g(s,a):d>0&&(m.branches=g(1e4,Math.round(d*100))),{metrics:m,files:[],source:{format:"scoverage-xml",path:e,sha256:await x(e)}}}async function z(e,t){let o=await u.readJson(t),n=new Map;for(let s of Object.values(o)){let a=s?.coverage;if(!(!a||typeof a!="object"||Array.isArray(a)))for(let[l,d]of Object.entries(a)){if(!Array.isArray(d))continue;let m=n.get(l)??[];d.forEach((b,h)=>{typeof b=="number"&&(m[h]=Math.max(m[h]??0,b));}),n.set(l,m);}}let r=[...n.entries()].map(([s,a])=>{let l=a.filter(d=>typeof d=="number");return {path:y(e,s),metrics:{lines:g(l.length,l.filter(d=>d>0).length)}}}),i=r.reduce((s,a)=>{let l=a.metrics.lines;return {total:s.total+(l?.total??0),covered:s.covered+(l?.covered??0)}},{total:0,covered:0});return {metrics:{lines:g(i.total,i.covered)},files:r,source:{format:"simplecov-json",path:t,sha256:await x(t)}}}async function B(e){let t=[{relativePath:"coverage/coverage-summary.json",parser:r=>W(e,r)},{relativePath:"coverage.json",parser:async r=>{let i=await u.readJson(r);return Array.isArray(i.data)?D(e,r):H(e,r)}},{relativePath:"coverage/lcov.info",parser:r=>M(e,r)},{relativePath:"cover/lcov.info",parser:r=>M(e,r)},{relativePath:"lcov.info",parser:r=>M(e,r)},{relativePath:"coverage.out",parser:r=>G(e,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>C(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>z(e,r)}];for(let r of t){let i=c.join(e,r.relativePath);if(await u.pathExists(i))return r.parser(i)}let n=(await P(e,(r,i)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||i.endsWith("/coverage-summary.json"),7)).sort()[0];return n?n.endsWith("coverage-summary.json")?W(e,n):n.endsWith("jacoco.xml")?C(n,"jacoco-xml"):n.endsWith("coverage.cobertura.xml")?C(n,"cobertura-xml"):n.endsWith("scoverage.xml")?q(n):C(n,"clover-xml"):null}async function U(e){return u.readJson(c.join(e,"package.json")).catch(()=>null)}async function K(e,t){let o=(n,r)=>({cwd:e,executable:n,args:r});if(t==="node"||t==="bun"){let r=(await U(e))?.scripts??{},i=["test:coverage","test:cov","coverage"].find(a=>typeof r[a]=="string"),s=t==="bun"?"bun":await u.pathExists(c.join(e,"pnpm-lock.yaml"))?"pnpm":await u.pathExists(c.join(e,"yarn.lock"))?"yarn":"npm";if(i)return {runner:String(r[i]).split(/\s+/)[0]||s,invocations:[o(s,s==="yarn"?[i]:["run",i])],diagnostics:[]};if(typeof r.test=="string"){let a=s==="yarn"?["test","--coverage"]:s==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(r.test).split(/\s+/)[0]||s,invocations:[o(s,a)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(t==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(t==="python")return {runner:"pytest-cov",invocations:[o(await u.pathExists(c.join(e,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?c.join(".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"):process.platform==="win32"?"python":"python3",["-m","pytest","--cov=.","--cov-report=json:coverage.json"])],diagnostics:[]};if(t==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(t==="java"){let n=await u.pathExists(c.join(e,"gradlew")),r=await u.pathExists(c.join(e,"gradlew.bat")),i=n||r,s=await u.pathExists(c.join(e,"mvnw")),a=await u.pathExists(c.join(e,"mvnw.cmd")),l=i?process.platform==="win32"&&r?".\\gradlew.bat":"./gradlew":await u.pathExists(c.join(e,"pom.xml"))?process.platform==="win32"&&a?".\\mvnw.cmd":s?"./mvnw":"mvn":"gradle";return {runner:i?"jacoco/gradle":"jacoco/maven",invocations:[o(l,i?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return t==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:t==="rust"?{runner:"cargo llvm-cov",invocations:[o("cargo",["llvm-cov","--json","--output-path","coverage.json"])],diagnostics:["cargo-llvm-cov must be available in the project toolchain."]}:t==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:t==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:t==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:t==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:t==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:t==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await u.pathExists(c.join(e,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:t==="c"||t==="cpp"?{runner:"CTest/LLVM coverage",invocations:[o("ctest",["--test-dir","build","--output-on-failure"])],diagnostics:["The native build must be instrumented for coverage and export LCOV, Cobertura, or LLVM JSON evidence."]}:{runner:null,invocations:[],diagnostics:["Project runtime could not be detected."]}}function X(e,t){let o=e?c.relative(e,t).split(c.sep).join("/"):c.resolve(t),n=c.basename(t).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",r=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${r}`}function Q(e){return e.lines?"lines":e.statements?"statements":e.branches?"branches":"functions"}async function ie(e$1={}){let t=await $(e$1.projectPath??process.cwd()),o=a(t),n=await V(t),r=Math.max(0,Math.min(100,Math.round(e$1.target??80))),i=await K(t,n),s=[],a$1=Date.now();if(e$1.run)for(let f of i.invocations){let w=await execa(f.executable,f.args,{cwd:f.cwd,reject:false,timeout:6e5}).catch(()=>({exitCode:1}));if(s.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let l=await B(t).catch(()=>null),d=l?Q(l.metrics):"lines",m=l?.metrics[d]?.percent??null,b=e$1.run&&s.some(f=>f!==0)?"failed":m===null?"unavailable":m>=r?"passed":"below-target",h=X(o,t),v=c.join(t,k),E=o?`.workspai/reports/projects/${h}/project-test-coverage-last-run.json`:null,R={schemaVersion:L,generatedAt:new Date().toISOString(),status:b,project:{id:h,name:c.basename(t),path:t,workspacePath:o},runtime:n,runner:i.runner,target:{metric:d,percent:r},metrics:l?.metrics??{},files:l?.files??[],lowCoverageFiles:(l?.files??[]).map(f=>{let w=f.metrics[d]??f.metrics.lines??f.metrics.statements;return {path:f.path,percent:w?.percent??null,uncovered:Math.max(0,(w?.total??0)-(w?.covered??0))}}).filter(f=>f.percent===null||f.percent<r).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:l?.source??{format:"unknown",path:null,sha256:null},execution:{requested:e$1.run===true,invocations:i.invocations,exitCodes:s,durationMs:Date.now()-a$1},diagnostics:[...i.diagnostics,...l?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:v,workspaceLatest:o?c.join(o,k):null,workspaceProject:o&&E?c.join(o,E):null}};return o&&E&&await f(o,k,[{relativePath:k,payload:R},{relativePath:E,payload:R}]),await e(t,k,R),R}export{L as a,k as b,ie as c};
@@ -1 +1 @@
1
- import {b}from'./chunk-AHLMIL2T.js';var o="model-usage-event.v1",s=b.evaluationLive,a="workspace-intelligence-evaluation-comparison.v1",i=["provider-reported","tokenizer-counted","estimated","unavailable"];export{o as a,s as b,a as c,i as d};
1
+ import {b}from'./chunk-62K2H72S.js';var o="model-usage-event.v1",s=b.evaluationLive,a="workspace-intelligence-evaluation-comparison.v1",i=["provider-reported","tokenizer-counted","estimated","unavailable"];export{o as a,s as b,a as c,i as d};