Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
71850df
dev pipeline: pin 0.2.22-dev-0ee861a
Sep 20, 2026
833365e
feat(run.sh): add a `subscription` LLM provider (Claude Code subscrip…
jmaggio Sep 21, 2026
b3da927
docs(hackday): rewrite Crusoe/Nebius OpenRouter steps to match the re…
c-v-pranav Sep 22, 2026
91529a6
Merge pull request #2 from c-v-pranav/docs/openrouter-preset-steps
aboutte Sep 22, 2026
bfc0d72
fix(run): surface studio API errors instead of a JSON traceback
aboutte Sep 22, 2026
a5ba6e1
feat(agent-skills): add Codex skills symlink
niranjan-duplocloud Sep 22, 2026
cd356a6
Merge pull request #5 from niranjan-duplocloud/test/agent-skill-symlinks
aboutte Sep 23, 2026
40c852c
fix(scripts): include .agents in upgrade_dev_kit.sh framework dirs
aboutte Sep 23, 2026
50d2a36
Merge pull request #6 from duplocloud/fix/framework-dirs-agents-skills
aboutte Sep 23, 2026
4760c7f
chore(samples): bump ng-common-lib to 0.3.0
shreyas-duplo Sep 23, 2026
8231151
docs(skill): add an ng-common-lib UI library reference
shreyas-duplo Sep 23, 2026
5401b04
Merge pull request #7 from shreyas-duplo/chore/ng-common-lib-0.3.0
aboutte Sep 23, 2026
2650e9f
Merge pull request #4 from duplocloud/fix/studio-create-error-reporting
aboutte Sep 23, 2026
ce818d3
chore: bump image tags in .env.example
aboutte Sep 23, 2026
321dd76
fix(switch-llm): address subscription-provider review findings
jmaggio Sep 24, 2026
445b12e
Merge remote-tracking branch 'upstream/dev' into feature/llm-provider…
jmaggio Sep 24, 2026
e077ae5
fix(subscription): drop shell-exported ANTHROPIC_API_KEY/BASE_URL and…
jmaggio Sep 25, 2026
2107e5c
Merge pull request #1 from jmaggio/feature/llm-provider-subscription
aboutte Sep 27, 2026
31fc3cc
feat(scripts): default to Sonnet 5 and offer Opus 5.5 in the LLM picker
aboutte Sep 27, 2026
b498b6e
Merge pull request #3 from duplocloud/feat/sonnet5-opus5-default
aboutte Sep 27, 2026
4dd399d
fix(scripts): use claude-opus-5 as the extra picker model
aboutte Sep 27, 2026
fef3fbd
Merge pull request #12 from duplocloud/fix/opus-5-model-id
aboutte Sep 27, 2026
6540958
feat(subscription): register opus 5, trim token, trim prompt noise
aboutte Sep 28, 2026
efb55d6
feat(run.sh): remove usage-metrics opt-in prompt and nginx toggle
aboutte Sep 28, 2026
9cb381d
Merge pull request #13 from duplocloud/worktree-remove-analytics-opti…
aboutte Sep 28, 2026
757aec3
chore: bump devkit mongo from 6.0 to 7.0.14
aboutte Sep 28, 2026
3b02b67
Merge pull request #14 from duplocloud/worktree-devkit-mongo-7.0.14
aboutte Sep 28, 2026
63e6d2f
fix(nginx): resolve studio upstream per-request instead of at startup
aboutte Sep 28, 2026
c65d2de
chore: bump UI_TAG to e67ae329
aboutte Sep 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills
3 changes: 2 additions & 1 deletion .claude/skills/duplo-extension-dev/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ from a built-in resource (Network, Namespace, …).
> [16-ask-ai](reference/16-ask-ai.md) — **opt-in** Ask AI chat sessions on a resource (build ONLY when asked) ·
> [17-custom-result-views](reference/17-custom-result-views.md) — the hand-written Result content: Overview tiles, tabs, panels ·
> [18-access-control](reference/18-access-control.md) — the `[AccessControl]` declaration and named actions ·
> [19-detail-page](reference/19-detail-page.md) — the detail-page shell, the lifecycle rail, per-resource phases per mode.
> [19-detail-page](reference/19-detail-page.md) — the detail-page shell, the lifecycle rail, per-resource phases per mode ·
> [20-ui-library](reference/20-ui-library.md) — every `ng-common-lib` export, a "need X → use Y" picker, verified recipes, and what works in a remote.

> **Every dev-kit extension is TYPED — there is no archetype choice.** A typed extension ships a compiled
> .NET DLL (`manifest.archetype = "typed"`) with the resource's own controller/route/collection, an Angular
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,8 @@ In `angular.json`, set `outputPath` to `{ "base": "dist", "browser": "" }` — A
> | `federation.config.js` `name` (== manifest `frontend.remote.remoteName`) | unique `duploExtension<Name>` |
> Update the routes in `extension.routes.ts`, and each component's own `imports`, to the renamed classes.

Use these library pieces (import from `@duplocloud-internal/ng-common-lib`):
Use these library pieces (import from `@duplocloud-internal/ng-common-lib`). The full catalog — every export,
and which ones don't work in a remote — is [20-ui-library](20-ui-library.md):
- **List** → `SearchableDatatableModule` (`<searchable-datatable [rows]="rows" (add)="…" (filter)="filterUpdate()">`
with projected `<ngx-datatable-column>` cells, an actions `ngbDropdown`, and a status badge). Two things the list
component **MUST** do — a plain `[rows]` + `(add)` binding that loads once in `ngOnInit` is the #1 pair of bugs:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,10 @@ See `samples/network-stack`'s add wizard (feeds `<duplo-wizard-stepper [error]>`

## Constraints / notes

- **No cross-boundary toast.** The host exposes no `REMOTE_` alerts/toast token, so an extension remote can't raise
the host toast service. Report **inline** (form banner / wizard slot) — that works fully inside the remote.
- **Toasts reach the host, but report form errors inline.** `ngx-toastr` is a shared singleton, so the lib's
`SharedAlertsService` shows the host's toast from a remote — the confirm dialogs and `app-code-block-with-copy`
do this on their own ([20-ui-library](20-ui-library.md#confirm-dialogs)). A failed create/update still goes
**inline** (form banner / wizard slot), beside the form the user has to fix. Never report one failure both ways.
- **No field-level error map.** On create, `errors` is a single string, not a per-field dict — surface it as one
message; don't expect to map it onto individual fields.
- **Where the real message comes from:** e.g. the name-uniqueness check throws
Expand Down
425 changes: 425 additions & 0 deletions .claude/skills/duplo-extension-dev/reference/20-ui-library.md

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
"@angular/material": "^22.1.0",
"@angular/platform-browser": "^22.1.0",
"@angular/router": "^22.1.0",
"@duplocloud-internal/ng-common-lib": "file:vendor/duplocloud-internal-ng-common-lib-0.2.0.tgz",
"@duplocloud-internal/ng-common-lib": "file:vendor/duplocloud-internal-ng-common-lib-0.3.0.tgz",
"@ng-bootstrap/ng-bootstrap": "^21.0.0",
"@ng-select/ng-select": "^23.5.1",
"@ngbracket/ngx-layout": "^22.0.1",
Expand All @@ -40,7 +40,7 @@
"monaco-editor": "^0.55.1",
"ngx-echarts": "^22.0.0",
"ngx-markdown": "^22.0.0",
"ngx-monaco-editor-v2": "^22.0.4",
"ngx-monaco-editor-v2": "22.0.4",
"ngx-toastr": "^20.0.5",
"rxjs": "^7.8.0",
"tslib": "^2.6.0",
Expand Down
Binary file not shown.
Binary file not shown.
Loading
Loading