@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.
- package/README.md +65 -224
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/UPSTREAM_LICENSE.txt +21 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/catalog.json +520 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/packaged/gitignore +27 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/README.md +25 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/components.json +22 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/eslint.config.js +23 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/index.html +13 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package-lock.json +6597 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/package.json +60 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/public/power-apps.svg +55 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/App.tsx +17 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/assets/react.svg +1 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/mode-toggle.tsx +37 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/badge.tsx +46 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/button.tsx +60 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/calendar.tsx +211 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/card.tsx +92 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/chart.tsx +355 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/checkbox.tsx +32 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/command.tsx +184 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dialog.tsx +141 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/dropdown-menu.tsx +257 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/input.tsx +21 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/label.tsx +22 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/popover.tsx +46 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/progress.tsx +29 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/select.tsx +185 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/separator.tsx +26 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/skeleton.tsx +13 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/table.tsx +114 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tabs.tsx +66 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/textarea.tsx +18 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/components/ui/tooltip.tsx +61 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/hooks/use-theme.ts +11 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/index.css +131 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/lib/utils.ts +6 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/main.tsx +10 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/_layout.tsx +31 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/home.tsx +59 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/pages/not-found.tsx +14 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/query-provider.tsx +26 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/sonner-provider.tsx +23 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/providers/theme-provider.tsx +64 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/src/router.tsx +24 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.app.json +34 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.json +13 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/tsconfig.node.json +26 -0
- package/assets/power-apps-code-app/3438c352483e40982f6c5c0fc36fd71f8e7adbbb/starter/vite.config.ts +19 -0
- package/assets/power-apps-code-app/README.md +27 -0
- package/dist/args.d.ts +33 -0
- package/dist/args.js +100 -38
- package/dist/args.js.map +1 -1
- package/dist/catalogs.d.ts +3 -1
- package/dist/catalogs.js +23 -0
- package/dist/catalogs.js.map +1 -1
- package/dist/cli.js +6 -1
- package/dist/cli.js.map +1 -1
- package/dist/code-apps-plugin.d.ts +13 -0
- package/dist/code-apps-plugin.js +69 -0
- package/dist/code-apps-plugin.js.map +1 -0
- package/dist/commands.d.ts +4 -0
- package/dist/commands.js +669 -321
- package/dist/commands.js.map +1 -1
- package/dist/file-system.d.ts +16 -1
- package/dist/file-system.js +320 -10
- package/dist/file-system.js.map +1 -1
- package/dist/framework-adapters.d.ts +5 -2
- package/dist/framework-adapters.js +5 -2
- package/dist/framework-adapters.js.map +1 -1
- package/dist/genai-templates.d.ts +6 -6
- package/dist/genai-templates.js +0 -3
- package/dist/genai-templates.js.map +1 -1
- package/dist/interactive.d.ts +80 -6
- package/dist/interactive.js +338 -142
- package/dist/interactive.js.map +1 -1
- package/dist/migrate-plan.d.ts +4 -4
- package/dist/migrate-plan.js +1 -1
- package/dist/migrate-plan.js.map +1 -1
- package/dist/planner.d.ts +5 -0
- package/dist/planner.js +197 -53
- package/dist/planner.js.map +1 -1
- package/dist/power-apps-assets.d.ts +30 -0
- package/dist/power-apps-assets.js +131 -0
- package/dist/power-apps-assets.js.map +1 -0
- package/dist/power-apps-templates.d.ts +3 -0
- package/dist/power-apps-templates.js +140 -0
- package/dist/power-apps-templates.js.map +1 -0
- package/dist/power-apps-validation.d.ts +1 -0
- package/dist/power-apps-validation.js +79 -0
- package/dist/power-apps-validation.js.map +1 -0
- package/dist/process-runner.js +9 -6
- package/dist/process-runner.js.map +1 -1
- package/dist/project-dependencies.d.ts +7 -4
- package/dist/project-dependencies.js +16 -4
- package/dist/project-dependencies.js.map +1 -1
- package/dist/published-verifier.js +1 -1
- package/dist/published-verifier.js.map +1 -1
- package/dist/standard-templates.d.ts +4 -4
- package/dist/standard-templates.js.map +1 -1
- package/dist/templates.d.ts +2 -2
- package/dist/templates.js +196 -50
- package/dist/templates.js.map +1 -1
- package/dist/terminal.d.ts +99 -3
- package/dist/terminal.js +482 -66
- package/dist/terminal.js.map +1 -1
- package/dist/types.d.ts +73 -15
- package/dist/workstation.d.ts +10 -5
- package/dist/workstation.js +25 -10
- package/dist/workstation.js.map +1 -1
- package/docs/assets/liftoff-terminal.svg +33 -0
- package/docs/azure-deployment.md +66 -0
- package/docs/cli-reference.md +128 -0
- package/docs/configuration-and-manifests.md +102 -0
- package/docs/existing-repositories.md +87 -0
- package/docs/getting-started.md +114 -0
- package/docs/prerequisites.md +99 -0
- package/docs/project-structure.md +119 -0
- package/docs/safety-and-consent.md +98 -0
- package/docs/spec-workflows-and-agents.md +92 -0
- package/docs/troubleshooting.md +133 -0
- package/docs/workloads.md +128 -0
- package/package.json +8 -2
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Spec workflows and agents
|
|
2
|
+
|
|
3
|
+
Spec-driven governance and coding-agent integration are common to every
|
|
4
|
+
Liftoff workload.
|
|
5
|
+
|
|
6
|
+
## Choose a spec workflow
|
|
7
|
+
|
|
8
|
+
### OpenSpec
|
|
9
|
+
|
|
10
|
+
OpenSpec organizes proposed behavior changes as reviewable artifacts before
|
|
11
|
+
implementation. Liftoff runs the pinned official OpenSpec initializer in
|
|
12
|
+
temporary staging and passes every selected coding agent in stable order.
|
|
13
|
+
|
|
14
|
+
Generated projects contain `openspec/` plus the selected agent integration
|
|
15
|
+
markers.
|
|
16
|
+
|
|
17
|
+
### Spec Kit
|
|
18
|
+
|
|
19
|
+
Spec Kit provides a specification, planning, and implementation workflow.
|
|
20
|
+
Liftoff initializes the selected default coding agent first, adds every
|
|
21
|
+
secondary integration, and records the default separately from the full agent
|
|
22
|
+
set.
|
|
23
|
+
|
|
24
|
+
Generated projects contain `.specify/`, `specs/`, and the selected agent
|
|
25
|
+
integration markers.
|
|
26
|
+
|
|
27
|
+
Liftoff does not hand-write framework-owned core or integration output. It
|
|
28
|
+
executes the tested official initializer, confines its writes to allowed roots,
|
|
29
|
+
and validates the declared markers before merging.
|
|
30
|
+
|
|
31
|
+
## Select coding agents
|
|
32
|
+
|
|
33
|
+
Liftoff supports:
|
|
34
|
+
|
|
35
|
+
- GitHub Copilot.
|
|
36
|
+
- Claude Code.
|
|
37
|
+
- Both agents together.
|
|
38
|
+
|
|
39
|
+
On a real TTY, use the arrow keys to move, Space to mark or unmark an agent,
|
|
40
|
+
and Enter to confirm. At least one agent is required.
|
|
41
|
+
|
|
42
|
+
When standard input is redirected, the deterministic fallback accepts a
|
|
43
|
+
comma-separated value such as:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
copilot,claude
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Noninteractive commands use:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
--agents copilot,claude
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Spec Kit additionally requires `--default-agent copilot` or
|
|
56
|
+
`--default-agent claude` when both are selected. OpenSpec does not record a
|
|
57
|
+
default agent.
|
|
58
|
+
|
|
59
|
+
## Readiness and ownership
|
|
60
|
+
|
|
61
|
+
The selected framework CLI and every selected agent are blocking workstation
|
|
62
|
+
requirements. Liftoff may detect Copilot through its CLI or supported VS Code
|
|
63
|
+
extensions. Claude Code is checked through version and health probes.
|
|
64
|
+
|
|
65
|
+
Framework files remain owned by the official initializer. Liftoff validates
|
|
66
|
+
them but excludes framework-owned output from durable artifact hashes so a
|
|
67
|
+
framework can manage its own lifecycle.
|
|
68
|
+
|
|
69
|
+
## Optional Code Apps plugin
|
|
70
|
+
|
|
71
|
+
Power Apps projects can request Microsoft's
|
|
72
|
+
`code-apps-preview@power-platform-skills` plugin. The integration is optional,
|
|
73
|
+
Preview, and independent for each selected agent.
|
|
74
|
+
|
|
75
|
+
Liftoff runs only allowlisted read-only plugin-list probes. A missing or
|
|
76
|
+
unobservable plugin produces advisory guidance and never makes initialization
|
|
77
|
+
or doctor fail by itself.
|
|
78
|
+
|
|
79
|
+
Install the targeted plugin manually inside the selected agent:
|
|
80
|
+
|
|
81
|
+
```text
|
|
82
|
+
/plugin marketplace add microsoft/power-platform-skills
|
|
83
|
+
/plugin install code-apps-preview@power-platform-skills
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Liftoff does not run Microsoft's broad marketplace installer and does not
|
|
87
|
+
invoke `/create-code-app`. The plugin's connector and deployment skills remain
|
|
88
|
+
available for post-creation work.
|
|
89
|
+
|
|
90
|
+
Changing the valid plugin preference in `liftoff.config.json` is reconciled by
|
|
91
|
+
`liftoff update`; it updates generated guidance and manifest intent without
|
|
92
|
+
creating API or infrastructure artifacts.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Troubleshooting
|
|
2
|
+
|
|
3
|
+
## The installed version is older than canonical npm
|
|
4
|
+
|
|
5
|
+
Check the canonical release:
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm view @msn-control/liftoff@latest version --registry=https://registry.npmjs.org
|
|
9
|
+
liftoff --version
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Versions before 0.3.0 are unsupported.
|
|
13
|
+
|
|
14
|
+
If a managed registry exposes an older version, stop onboarding and ask the
|
|
15
|
+
mirror owner to synchronize or approve the release. Liftoff does not modify
|
|
16
|
+
`.npmrc`. A successful installation of an older mirrored package does not make
|
|
17
|
+
that version supported.
|
|
18
|
+
|
|
19
|
+
## An installed tool is still reported missing
|
|
20
|
+
|
|
21
|
+
Installers that change `PATH` may require a new terminal. Open one, rerun:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
liftoff doctor
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Do not assume installer exit code 0 proves readiness; the requirement probe
|
|
28
|
+
must pass.
|
|
29
|
+
|
|
30
|
+
## Initialization wants to create a child folder
|
|
31
|
+
|
|
32
|
+
In-place initialization occurs only when the current directory exactly matches
|
|
33
|
+
the Git worktree root:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
git rev-parse --show-toplevel
|
|
37
|
+
pwd
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Change to that root and rerun `liftoff init`. See
|
|
41
|
+
[existing repositories](existing-repositories.md).
|
|
42
|
+
|
|
43
|
+
## Initialization reports replacement conflicts
|
|
44
|
+
|
|
45
|
+
Review the complete replacement list. Approve interactively or rerun with
|
|
46
|
+
`--force` only when every listed regular file may be replaced.
|
|
47
|
+
|
|
48
|
+
`--force` cannot bypass directories, symlinks, unsafe ancestors, an existing
|
|
49
|
+
manifest, or a non-empty migration target. Move or rename the structural
|
|
50
|
+
conflict and retry.
|
|
51
|
+
|
|
52
|
+
## A handled write failed
|
|
53
|
+
|
|
54
|
+
Liftoff reports whether rollback completed. Correct the filesystem problem and
|
|
55
|
+
retry. If rollback was incomplete, stop and inspect every reported path before
|
|
56
|
+
running another write command.
|
|
57
|
+
|
|
58
|
+
## Validation reports a malformed or unsafe manifest
|
|
59
|
+
|
|
60
|
+
Manifest paths must be portable path-part arrays confined to the project.
|
|
61
|
+
Traversal, absolute, drive-qualified, UNC, embedded-separator, empty, and
|
|
62
|
+
symlink-escaping paths are rejected before artifact access.
|
|
63
|
+
|
|
64
|
+
Restore `liftoff.manifest.json` from version control or regenerate the project
|
|
65
|
+
with the matching Liftoff version. Do not weaken path validation or retain a
|
|
66
|
+
hand-edited unsafe path.
|
|
67
|
+
|
|
68
|
+
## Update reports conflicts or orphans
|
|
69
|
+
|
|
70
|
+
`liftoff update` does not write. Review the report:
|
|
71
|
+
|
|
72
|
+
- Apply safe changes with `liftoff update --apply`.
|
|
73
|
+
- Developer conflicts remain untouched unless you explicitly use
|
|
74
|
+
`liftoff update --apply --force`.
|
|
75
|
+
- Orphans are never deleted automatically.
|
|
76
|
+
|
|
77
|
+
Commit local work before applying when possible.
|
|
78
|
+
|
|
79
|
+
## Power Apps dependencies or CLI are missing
|
|
80
|
+
|
|
81
|
+
From the project root:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
npm ci
|
|
85
|
+
npx --no-install power-apps --version
|
|
86
|
+
npm run dev
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The CLI is project-local. Do not replace the locked install with an unrelated
|
|
90
|
+
global package.
|
|
91
|
+
|
|
92
|
+
## The Code Apps plugin is missing or not observable
|
|
93
|
+
|
|
94
|
+
Plugin state is advisory. In each selected agent session, use:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
/plugin marketplace add microsoft/power-platform-skills
|
|
98
|
+
/plugin install code-apps-preview@power-platform-skills
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Then rerun `liftoff doctor`. Do not run `/create-code-app` in a Liftoff project.
|
|
102
|
+
Liftoff does not run Microsoft's broad plugin installer.
|
|
103
|
+
|
|
104
|
+
## Terminal output is hard to read or being captured
|
|
105
|
+
|
|
106
|
+
Rich output requires a wide TTY. Redirected output automatically uses
|
|
107
|
+
deterministic plain text. To disable color while retaining layout:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
NO_COLOR=1 liftoff doctor
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use `--json` with validate, doctor, or update for machine consumption.
|
|
114
|
+
|
|
115
|
+
## `liftoff create` is rejected
|
|
116
|
+
|
|
117
|
+
Use:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
liftoff init
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
The old command has no compatibility alias.
|
|
124
|
+
|
|
125
|
+
## Get command syntax
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
liftoff help
|
|
129
|
+
liftoff init --help
|
|
130
|
+
liftoff update --help
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Unknown or incompatible inputs fail instead of falling back to another action.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Workloads
|
|
2
|
+
|
|
3
|
+
Liftoff asks for one workload first, then routes only the questions,
|
|
4
|
+
prerequisites, generated artifacts, and maintenance checks that apply to it.
|
|
5
|
+
|
|
6
|
+
## At a glance
|
|
7
|
+
|
|
8
|
+
| Workload | Primary choices | Required runtime | Liftoff-generated platform areas |
|
|
9
|
+
| --- | --- | --- | --- |
|
|
10
|
+
| GenAI application | Pattern, Azure region, environments, optional frontend | Python 3.12 and Node.js 20.19+ | API, orchestration, data, messaging, Docker, Azure OpenTofu |
|
|
11
|
+
| API application | Python, Node.js, or Go API stack; Azure region; environments; optional frontend | Selected API runtime and Node.js 20.19+ | API, data, Docker, Azure OpenTofu |
|
|
12
|
+
| Power Apps code app | Spec workflow, agents, optional Code Apps plugin | Node.js 22.12+ | Official React/Vite starter and project-local Power Apps tooling |
|
|
13
|
+
|
|
14
|
+
All three workloads continue into the common OpenSpec or Spec Kit and coding
|
|
15
|
+
agent flow.
|
|
16
|
+
|
|
17
|
+
## GenAI application
|
|
18
|
+
|
|
19
|
+
### Questions
|
|
20
|
+
|
|
21
|
+
- Project name.
|
|
22
|
+
- GenAI pattern such as prompt, chatbot, RAG, agent, multi-agent, or workflow.
|
|
23
|
+
- Azure region and generated environments.
|
|
24
|
+
- Whether to generate a frontend.
|
|
25
|
+
- Spec workflow and coding agents.
|
|
26
|
+
|
|
27
|
+
The selected pattern fixes the API stack to Python, FastAPI, and PydanticAI.
|
|
28
|
+
|
|
29
|
+
### Generated output
|
|
30
|
+
|
|
31
|
+
- FastAPI backend and Scalar/OpenAPI integration.
|
|
32
|
+
- PydanticAI orchestration, prompts, and model configuration boundaries.
|
|
33
|
+
- PostgreSQL and pattern-specific Redis or Azure Service Bus boundaries.
|
|
34
|
+
- Offline-testable tracing and integration adapters.
|
|
35
|
+
- Docker Compose and Azure OpenTofu.
|
|
36
|
+
- Optional Vue frontend and pattern-specific Azure Functions workers.
|
|
37
|
+
|
|
38
|
+
### Deferred actions
|
|
39
|
+
|
|
40
|
+
Liftoff does not insert model credentials, sign in to cloud services, or deploy
|
|
41
|
+
resources. Configure `.env`, authenticate separately, and review generated
|
|
42
|
+
infrastructure before applying it.
|
|
43
|
+
|
|
44
|
+
## API application
|
|
45
|
+
|
|
46
|
+
### Questions
|
|
47
|
+
|
|
48
|
+
- Project name.
|
|
49
|
+
- API stack: Python/FastAPI, Node.js/Fastify with TypeScript, or Go/Huma v2
|
|
50
|
+
with Chi.
|
|
51
|
+
- Azure region and generated environments.
|
|
52
|
+
- Whether to generate a frontend.
|
|
53
|
+
- Spec workflow and coding agents.
|
|
54
|
+
|
|
55
|
+
### Generated output
|
|
56
|
+
|
|
57
|
+
- Stack-native API, OpenAPI, tests, and database migrations.
|
|
58
|
+
- PostgreSQL, Redis, Azurite, and Mailpit local services where applicable.
|
|
59
|
+
- Docker Compose and Azure OpenTofu.
|
|
60
|
+
- Optional Vue frontend.
|
|
61
|
+
|
|
62
|
+
### Deferred actions
|
|
63
|
+
|
|
64
|
+
Service secrets, cloud authentication, external integrations, and deployment
|
|
65
|
+
remain explicit developer or delivery-pipeline actions.
|
|
66
|
+
|
|
67
|
+
## Power Apps code app
|
|
68
|
+
|
|
69
|
+
Power Apps uses an immutable, packaged snapshot of Microsoft's official
|
|
70
|
+
[`PowerAppsCodeApps/templates/starter`](https://github.com/microsoft/PowerAppsCodeApps/tree/main/templates/starter).
|
|
71
|
+
Initialization and update do not fetch the mutable upstream branch.
|
|
72
|
+
|
|
73
|
+
### Questions
|
|
74
|
+
|
|
75
|
+
- Project name.
|
|
76
|
+
- OpenSpec or Spec Kit.
|
|
77
|
+
- GitHub Copilot, Claude Code, or both.
|
|
78
|
+
- Spec Kit default agent when both are selected.
|
|
79
|
+
- Whether to request the optional Microsoft Code Apps agent plugin
|
|
80
|
+
(Preview).
|
|
81
|
+
|
|
82
|
+
Power Apps does not ask for an API stack, GenAI pattern, cloud, region, API
|
|
83
|
+
environment, API frontend, Docker, or OpenTofu selection.
|
|
84
|
+
|
|
85
|
+
### Generated output
|
|
86
|
+
|
|
87
|
+
- React, Vite, TypeScript, Tailwind, and the Power Apps SDK and Vite plugin.
|
|
88
|
+
- Locked root `package.json` and `package-lock.json`.
|
|
89
|
+
- Project-local `power-apps` CLI supplied by the generated dependency graph.
|
|
90
|
+
- `liftoff.config.json`, schema-v4 `liftoff.manifest.json`, starter provenance,
|
|
91
|
+
and third-party attribution.
|
|
92
|
+
- Official OpenSpec or Spec Kit output and every selected agent marker.
|
|
93
|
+
|
|
94
|
+
Liftoff does not create an API backend, `docker-compose.yml`,
|
|
95
|
+
`infrastructure/`, API environments, or an environment-bound
|
|
96
|
+
`power.config.json` for this workload.
|
|
97
|
+
|
|
98
|
+
### Deferred actions
|
|
99
|
+
|
|
100
|
+
After initialization:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
npm ci
|
|
104
|
+
npm run dev
|
|
105
|
+
npx --no-install power-apps --version
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Environment binding, connector creation, authentication, and deployment remain
|
|
109
|
+
outside initialization. Follow Microsoft's current Code Apps documentation
|
|
110
|
+
before running `power-apps init` or `power-apps push`.
|
|
111
|
+
|
|
112
|
+
If the optional Code Apps plugin was requested, install only the targeted
|
|
113
|
+
plugin from an agent session:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
/plugin marketplace add microsoft/power-platform-skills
|
|
117
|
+
/plugin install code-apps-preview@power-platform-skills
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Do not run `/create-code-app` inside the generated project; Liftoff already
|
|
121
|
+
created the application.
|
|
122
|
+
|
|
123
|
+
## Change workload later
|
|
124
|
+
|
|
125
|
+
`liftoff update` reconciles supported desired-state changes within the recorded
|
|
126
|
+
workload. It does not convert among GenAI, API, and Power Apps or change an API
|
|
127
|
+
stack, GenAI pattern, or user-supplied starter identity. Initialize a fresh
|
|
128
|
+
project or use a supported migration flow instead.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@msn-control/liftoff",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Interactive CLI for governed GenAI, API, and Power Apps code app projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "GPL-3.0-only",
|
|
7
7
|
"homepage": "https://github.com/voyager163/liftoff#readme",
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"fastify",
|
|
22
22
|
"golang",
|
|
23
23
|
"pydanticai",
|
|
24
|
+
"power-apps",
|
|
24
25
|
"opentofu",
|
|
25
26
|
"openspec",
|
|
26
27
|
"mission-control"
|
|
@@ -31,6 +32,8 @@
|
|
|
31
32
|
"files": [
|
|
32
33
|
"dist",
|
|
33
34
|
"assets/locks",
|
|
35
|
+
"assets/power-apps-code-app",
|
|
36
|
+
"docs",
|
|
34
37
|
"README.md",
|
|
35
38
|
"LICENSE"
|
|
36
39
|
],
|
|
@@ -41,7 +44,9 @@
|
|
|
41
44
|
"scripts": {
|
|
42
45
|
"build": "tsc -p tsconfig.json",
|
|
43
46
|
"test": "vitest run",
|
|
47
|
+
"refresh:power-apps-starter": "node scripts/refresh-power-apps-starter.mjs",
|
|
44
48
|
"smoke:package": "npm run build && node scripts/package-smoke-test.mjs",
|
|
49
|
+
"verify:power-apps-starter": "npm run build && node scripts/verify-power-apps-starter.mjs",
|
|
45
50
|
"verify:release-identity": "npm run build && node scripts/verify-release-identity.mjs",
|
|
46
51
|
"verify:published": "npm run build && node scripts/verify-published-package.mjs",
|
|
47
52
|
"check": "npm run build && npm test"
|
|
@@ -56,6 +61,7 @@
|
|
|
56
61
|
"vitest": "^4.1.9"
|
|
57
62
|
},
|
|
58
63
|
"dependencies": {
|
|
64
|
+
"@inquirer/prompts": "^7.10.1",
|
|
59
65
|
"cross-spawn": "^7.0.6",
|
|
60
66
|
"picocolors": "^1.1.1"
|
|
61
67
|
}
|