@msn-control/liftoff 0.4.0 → 0.5.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 (123) hide show
  1. package/README.md +65 -224
  2. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +21 -0
  3. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +520 -0
  4. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +27 -0
  5. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +25 -0
  6. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +22 -0
  7. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +23 -0
  8. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +13 -0
  9. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +6597 -0
  10. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +60 -0
  11. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +55 -0
  12. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +17 -0
  13. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +1 -0
  14. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +37 -0
  15. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +46 -0
  16. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +60 -0
  17. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +211 -0
  18. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +92 -0
  19. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +355 -0
  20. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +32 -0
  21. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +184 -0
  22. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +141 -0
  23. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +257 -0
  24. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +21 -0
  25. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +22 -0
  26. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +46 -0
  27. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +29 -0
  28. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +185 -0
  29. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +26 -0
  30. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +13 -0
  31. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +114 -0
  32. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +66 -0
  33. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +18 -0
  34. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +61 -0
  35. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +11 -0
  36. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +131 -0
  37. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +6 -0
  38. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +10 -0
  39. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +31 -0
  40. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +59 -0
  41. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +14 -0
  42. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +26 -0
  43. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +23 -0
  44. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +64 -0
  45. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +24 -0
  46. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +34 -0
  47. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +13 -0
  48. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +26 -0
  49. package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +19 -0
  50. package/assets/power-apps-code-app/README.md +27 -0
  51. package/dist/args.d.ts +33 -0
  52. package/dist/args.js +100 -38
  53. package/dist/args.js.map +1 -1
  54. package/dist/catalogs.d.ts +3 -1
  55. package/dist/catalogs.js +23 -0
  56. package/dist/catalogs.js.map +1 -1
  57. package/dist/cli.js +6 -1
  58. package/dist/cli.js.map +1 -1
  59. package/dist/code-apps-plugin.d.ts +13 -0
  60. package/dist/code-apps-plugin.js +69 -0
  61. package/dist/code-apps-plugin.js.map +1 -0
  62. package/dist/commands.d.ts +4 -0
  63. package/dist/commands.js +669 -321
  64. package/dist/commands.js.map +1 -1
  65. package/dist/file-system.d.ts +16 -1
  66. package/dist/file-system.js +320 -10
  67. package/dist/file-system.js.map +1 -1
  68. package/dist/framework-adapters.d.ts +5 -2
  69. package/dist/framework-adapters.js +5 -2
  70. package/dist/framework-adapters.js.map +1 -1
  71. package/dist/genai-templates.d.ts +6 -6
  72. package/dist/genai-templates.js +0 -3
  73. package/dist/genai-templates.js.map +1 -1
  74. package/dist/interactive.d.ts +80 -6
  75. package/dist/interactive.js +338 -142
  76. package/dist/interactive.js.map +1 -1
  77. package/dist/migrate-plan.d.ts +4 -4
  78. package/dist/migrate-plan.js +1 -1
  79. package/dist/migrate-plan.js.map +1 -1
  80. package/dist/planner.d.ts +5 -0
  81. package/dist/planner.js +197 -53
  82. package/dist/planner.js.map +1 -1
  83. package/dist/power-apps-assets.d.ts +30 -0
  84. package/dist/power-apps-assets.js +131 -0
  85. package/dist/power-apps-assets.js.map +1 -0
  86. package/dist/power-apps-templates.d.ts +3 -0
  87. package/dist/power-apps-templates.js +140 -0
  88. package/dist/power-apps-templates.js.map +1 -0
  89. package/dist/power-apps-validation.d.ts +1 -0
  90. package/dist/power-apps-validation.js +79 -0
  91. package/dist/power-apps-validation.js.map +1 -0
  92. package/dist/process-runner.js +9 -6
  93. package/dist/process-runner.js.map +1 -1
  94. package/dist/project-dependencies.d.ts +7 -4
  95. package/dist/project-dependencies.js +16 -4
  96. package/dist/project-dependencies.js.map +1 -1
  97. package/dist/published-verifier.js +1 -1
  98. package/dist/published-verifier.js.map +1 -1
  99. package/dist/standard-templates.d.ts +4 -4
  100. package/dist/standard-templates.js.map +1 -1
  101. package/dist/templates.d.ts +2 -2
  102. package/dist/templates.js +196 -50
  103. package/dist/templates.js.map +1 -1
  104. package/dist/terminal.d.ts +99 -3
  105. package/dist/terminal.js +482 -66
  106. package/dist/terminal.js.map +1 -1
  107. package/dist/types.d.ts +73 -15
  108. package/dist/workstation.d.ts +10 -5
  109. package/dist/workstation.js +25 -10
  110. package/dist/workstation.js.map +1 -1
  111. package/docs/assets/liftoff-terminal.svg +33 -0
  112. package/docs/azure-deployment.md +66 -0
  113. package/docs/cli-reference.md +128 -0
  114. package/docs/configuration-and-manifests.md +102 -0
  115. package/docs/existing-repositories.md +87 -0
  116. package/docs/getting-started.md +114 -0
  117. package/docs/prerequisites.md +99 -0
  118. package/docs/project-structure.md +119 -0
  119. package/docs/safety-and-consent.md +98 -0
  120. package/docs/spec-workflows-and-agents.md +92 -0
  121. package/docs/troubleshooting.md +133 -0
  122. package/docs/workloads.md +128 -0
  123. package/package.json +8 -2
@@ -0,0 +1,69 @@
1
+ import { codeAppsPlugin } from './catalogs.js';
2
+ export function codeAppsPluginIdentity() {
3
+ return `${codeAppsPlugin.id}@${codeAppsPlugin.marketplace}`;
4
+ }
5
+ export function codeAppsPluginGuidance(agent) {
6
+ return [
7
+ `Open ${agent.label} and add the marketplace with`,
8
+ '`/plugin marketplace add microsoft/power-platform-skills`, then install',
9
+ `\`/plugin install ${codeAppsPluginIdentity()}\`.`,
10
+ 'Do not run `/create-code-app` in this project; use the connector and deployment skills',
11
+ 'after Liftoff creates the application.'
12
+ ].join(' ');
13
+ }
14
+ export async function probeCodeAppsPlugin(agents, runner, cwd) {
15
+ return Promise.all(agents.map(async (agent) => {
16
+ const id = `code-apps-plugin:${agent.id}`;
17
+ const command = codeAppsPlugin.probes[agent.id];
18
+ if (!command) {
19
+ return {
20
+ agent,
21
+ id,
22
+ state: 'not-observable',
23
+ detail: `${agent.label} has no allowlisted plugin-list probe.`,
24
+ remedy: codeAppsPluginGuidance(agent)
25
+ };
26
+ }
27
+ const result = await runner.run(command, { cwd, timeoutMs: 15_000 });
28
+ if (result.errorCode === 'ENOENT' || result.errorCode === 'UNKNOWN') {
29
+ return {
30
+ agent,
31
+ id,
32
+ state: 'not-observable',
33
+ detail: `${agent.label} is unavailable, so plugin state cannot be observed.`,
34
+ remedy: codeAppsPluginGuidance(agent)
35
+ };
36
+ }
37
+ if (result.status !== 0 || result.timedOut) {
38
+ return {
39
+ agent,
40
+ id,
41
+ state: 'not-observable',
42
+ detail: result.timedOut
43
+ ? `${agent.label} plugin-list probe timed out.`
44
+ : (result.stderr || result.errorMessage || `${agent.label} does not expose plugin state through this command.`)
45
+ .trim()
46
+ .split(/\r?\n/)[0],
47
+ remedy: codeAppsPluginGuidance(agent)
48
+ };
49
+ }
50
+ const installed = `${result.stdout}\n${result.stderr}`
51
+ .toLowerCase()
52
+ .includes(codeAppsPlugin.id);
53
+ return installed
54
+ ? {
55
+ agent,
56
+ id,
57
+ state: 'ready',
58
+ detail: `${codeAppsPluginIdentity()} ${codeAppsPlugin.version} is reported by ${agent.label}.`
59
+ }
60
+ : {
61
+ agent,
62
+ id,
63
+ state: 'missing',
64
+ detail: `${codeAppsPluginIdentity()} is not listed by ${agent.label}.`,
65
+ remedy: codeAppsPluginGuidance(agent)
66
+ };
67
+ }));
68
+ }
69
+ //# sourceMappingURL=code-apps-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-apps-plugin.js","sourceRoot":"","sources":["../src/code-apps-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAc/C,MAAM,UAAU,sBAAsB;IACpC,OAAO,GAAG,cAAc,CAAC,EAAE,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAA4B;IACjE,OAAO;QACL,QAAQ,KAAK,CAAC,KAAK,+BAA+B;QAClD,yEAAyE;QACzE,qBAAqB,sBAAsB,EAAE,KAAK;QAClD,wFAAwF;QACxF,wCAAwC;KACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAA+B,EAC/B,MAAqB,EACrB,GAAY;IAEZ,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAgC,EAAE;QAC1E,MAAM,EAAE,GAAG,oBAAoB,KAAK,CAAC,EAAE,EAAW,CAAC;QACnD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,KAAK;gBACL,EAAE;gBACF,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,wCAAwC;gBAC9D,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC;aACtC,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpE,OAAO;gBACL,KAAK;gBACL,EAAE;gBACF,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,sDAAsD;gBAC5E,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC;aACtC,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,OAAO;gBACL,KAAK;gBACL,EAAE;gBACF,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,MAAM,CAAC,QAAQ;oBACrB,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,+BAA+B;oBAC/C,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,KAAK,qDAAqD,CAAC;yBAC5G,IAAI,EAAE;yBACN,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC;aACtC,CAAC;QACJ,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE;aACnD,WAAW,EAAE;aACb,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,SAAS;YACd,CAAC,CAAC;gBACE,KAAK;gBACL,EAAE;gBACF,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,GAAG,sBAAsB,EAAE,IAAI,cAAc,CAAC,OAAO,mBAAmB,KAAK,CAAC,KAAK,GAAG;aAC/F;YACH,CAAC,CAAC;gBACE,KAAK;gBACL,EAAE;gBACF,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,GAAG,sBAAsB,EAAE,qBAAqB,KAAK,CAAC,KAAK,GAAG;gBACtE,MAAM,EAAE,sBAAsB,CAAC,KAAK,CAAC;aACtC,CAAC;IACR,CAAC,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,10 +1,14 @@
1
+ import type { Readable } from 'node:stream';
1
2
  import { type CommandRunner } from './process-runner.js';
3
+ import { type PresentationSessionOptions } from './terminal.js';
2
4
  import type { ParsedArgs, ProjectOptions } from './types.js';
3
5
  export interface CommandContext {
4
6
  cwd: string;
5
7
  stdout: NodeJS.WritableStream;
6
8
  stderr: NodeJS.WritableStream;
9
+ stdin?: Readable;
7
10
  runner?: CommandRunner;
11
+ terminal?: Pick<PresentationSessionOptions, 'columns' | 'color' | 'snapshot' | 'env' | 'layout' | 'normalize'>;
8
12
  }
9
13
  export declare function runCommand(parsed: ParsedArgs, context: CommandContext): Promise<number>;
10
14
  interface DoctorCheck {