codeapp-js 0.3.0 → 1.0.1

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 (158) hide show
  1. package/AI/codeapp.agent.md +105 -0
  2. package/AI/skills/connections/SKILL.md +47 -0
  3. package/AI/skills/dataverse/SKILL.md +99 -0
  4. package/AI/skills/environment-variables/SKILL.md +89 -0
  5. package/AI/skills/frontend-design/SKILL.md +34 -0
  6. package/AI/skills/jira/SKILL.md +81 -0
  7. package/AI/skills/office365-groups/SKILL.md +61 -0
  8. package/AI/skills/office365-outlook/SKILL.md +52 -0
  9. package/AI/skills/office365-users/SKILL.md +78 -0
  10. package/AI/skills/sharepoint/SKILL.md +77 -0
  11. package/AI/skills/sql/SKILL.md +85 -0
  12. package/AI/skills/start/SKILL.md +46 -0
  13. package/AI/skills/teams/SKILL.md +55 -0
  14. package/{examples/combined demo/.power/schemas/office365groups/office365groups.Schema.json → codeApp/.power/schemas/office365groups/office365groups.Schema.json} +2203 -2203
  15. package/codeApp/dist/codeapp.js +95 -1792
  16. package/codeApp/dist/connectors/azureKeyvault.js +459 -0
  17. package/codeApp/dist/connectors/jira.js +1247 -0
  18. package/codeApp/dist/connectors/office365groups.js +642 -0
  19. package/codeApp/dist/connectors/office365users.js +513 -0
  20. package/codeApp/dist/connectors/outlook.js +1393 -0
  21. package/codeApp/dist/connectors/sharepoint.js +466 -0
  22. package/codeApp/dist/connectors/sql.js +149 -0
  23. package/codeApp/dist/connectors/teams.js +280 -0
  24. package/codeApp/dist/power-apps-data.js +16 -2
  25. package/examples/{kanban → apps/kanban}/dist/dataverse.js +94 -94
  26. package/examples/{kanban → apps/kanban}/dist/environmentVar.js +55 -55
  27. package/examples/{kanban → apps/kanban}/dist/index.css +605 -605
  28. package/examples/{kanban → apps/kanban}/dist/index.html +21 -21
  29. package/examples/{kanban → apps/kanban}/dist/index.js +860 -860
  30. package/examples/{kanban → apps/kanban}/dist/office365groups.js +97 -97
  31. package/examples/apps/kanban/dist/office365users.js +451 -0
  32. package/examples/{kanban → apps/kanban}/dist/outlook.js +162 -162
  33. package/examples/{planning Poker/dist/power-apps-data.js → apps/kanban/dist/power-apps-data.js} +2953 -2953
  34. package/examples/{kanban → apps/kanban}/dist/sharepoint.js +435 -339
  35. package/examples/{kanban → apps/kanban}/power.config.json +35 -35
  36. package/examples/{planning Poker → apps/planning Poker}/additional files/customizations (tables).xml +6428 -6428
  37. package/examples/{planning Poker → apps/planning Poker}/additional files/dataverse-tables.json +165 -165
  38. package/examples/{planning Poker → apps/planning Poker}/additional files/readme.md +122 -122
  39. package/examples/{planning Poker → apps/planning Poker}/dist/dataverse.js +78 -78
  40. package/examples/{planning Poker → apps/planning Poker}/dist/index.html +198 -198
  41. package/examples/{planning Poker → apps/planning Poker}/dist/index.js +954 -954
  42. package/examples/{todo/dist/power-apps-data.js → apps/planning Poker/dist/power-apps-data.js } +2953 -2953
  43. package/examples/{planning Poker → apps/planning Poker}/dist/styles.css +815 -815
  44. package/examples/{planning Poker → apps/planning Poker}/power.config.json +50 -50
  45. package/examples/{outlook Demo2 → apps/solution explorer}/dist/codeapp.js +9 -245
  46. package/examples/apps/solution explorer/dist/index.html +80 -0
  47. package/examples/apps/solution explorer/dist/index.js +735 -0
  48. package/examples/apps/solution explorer/dist/styles.css +571 -0
  49. package/examples/apps/solution explorer/power.config.json +151 -0
  50. package/examples/{todo → apps/todo}/dist/dataverse.js +64 -64
  51. package/examples/{todo → apps/todo}/dist/index.html +75 -75
  52. package/examples/{todo → apps/todo}/dist/index.js +8 -8
  53. package/examples/{kanban → apps/todo}/dist/power-apps-data.js +2953 -2953
  54. package/examples/{todo → apps/todo}/dist/renderer.js +375 -375
  55. package/examples/{todo → apps/todo}/dist/styles.css +691 -691
  56. package/examples/{todo → apps/todo}/power.config.json +34 -34
  57. package/examples/combined demo/.power/schemas/appschemas/dataSourcesInfo.ts +6275 -7830
  58. package/examples/combined demo/.power/schemas/jira/jira.Schema.json +6903 -0
  59. package/examples/combined demo/.power/schemas/keyvault/keyvault.Schema.json +1600 -0
  60. package/examples/combined demo/.power/schemas/teams/teams.Schema.json +11112 -0
  61. package/examples/combined demo/dist/codeapp.js +394 -1098
  62. package/examples/{outlook Demo2/OutlookDemo_1_0_0_1.zip → combined demo/dist/icon-512.png} +0 -0
  63. package/examples/combined demo/dist/index.html +29 -511
  64. package/examples/combined demo/dist/index.js +490 -470
  65. package/examples/combined demo/dist/office365users.js +513 -0
  66. package/examples/combined demo/dist/outlook.js +1393 -0
  67. package/examples/combined demo/dist/power-apps-data.js +3079 -3006
  68. package/examples/combined demo/dist/styles.css +483 -0
  69. package/examples/combined demo/power.config.json +33 -42
  70. package/examples/combined demo/src/generated/index.ts +12 -14
  71. package/examples/combined demo/src/generated/models/AzureKeyVaultModel.ts +107 -0
  72. package/examples/combined demo/src/generated/models/JiraModel.ts +501 -0
  73. package/examples/combined demo/src/generated/services/AzureKeyVaultService.ts +257 -0
  74. package/examples/combined demo/src/generated/services/JiraService.ts +1124 -0
  75. package/examples/dataverse Demo/dist/codeapp.js +394 -1085
  76. package/examples/dataverse Demo/dist/icon-512.png +0 -0
  77. package/examples/dataverse Demo/dist/index.html +146 -54
  78. package/examples/dataverse Demo/dist/index.js +693 -83
  79. package/examples/dataverse Demo/dist/power-apps-data.js +3079 -2911
  80. package/examples/dataverse Demo/dist/styles.css +528 -0
  81. package/examples/dataverse Demo/power.config.json +41 -35
  82. package/examples/dataverse Demo/readme.md +79 -79
  83. package/examples/groups Demo/dist/codeapp.js +394 -1085
  84. package/examples/groups Demo/dist/icon-512.png +0 -0
  85. package/examples/groups Demo/dist/index.html +21 -25
  86. package/examples/groups Demo/dist/index.js +304 -113
  87. package/examples/groups Demo/dist/office365groups.js +642 -0
  88. package/examples/groups Demo/dist/power-apps-data.js +3079 -2911
  89. package/examples/groups Demo/dist/styles.css +509 -0
  90. package/examples/groups Demo/power.config.json +25 -25
  91. package/examples/myProfile/dist/codeapp.js +398 -0
  92. package/examples/myProfile/dist/index.html +21 -184
  93. package/examples/myProfile/dist/index.js +324 -141
  94. package/examples/myProfile/dist/office365users.js +517 -169
  95. package/examples/myProfile/dist/power-apps-data.js +3080 -2953
  96. package/examples/myProfile/dist/styles.css +458 -0
  97. package/examples/myProfile/power.config.json +24 -23
  98. package/examples/outlook Demo/dist/codeapp.js +394 -1085
  99. package/examples/outlook Demo/dist/index.html +150 -35
  100. package/examples/outlook Demo/dist/index.js +516 -170
  101. package/examples/outlook Demo/dist/outlook.js +1393 -121
  102. package/examples/outlook Demo/dist/power-apps-data.js +3079 -2911
  103. package/examples/outlook Demo/dist/styles.css +408 -84
  104. package/examples/outlook Demo/power.config.json +24 -23
  105. package/examples/outlook Demo/readme.md +92 -82
  106. package/examples/sharePoint Demo/dist/codeapp.js +394 -1085
  107. package/examples/sharePoint Demo/dist/icon-512.png +0 -0
  108. package/examples/sharePoint Demo/dist/index.html +22 -255
  109. package/examples/sharePoint Demo/dist/index.js +899 -262
  110. package/examples/sharePoint Demo/dist/power-apps-data.js +3079 -2911
  111. package/{dev files → examples/sharePoint Demo/dist}/sharepoint.js +239 -112
  112. package/examples/sharePoint Demo/dist/styles.css +587 -0
  113. package/examples/sharePoint Demo/power.config.json +23 -22
  114. package/package.json +1 -1
  115. package/readme.md +465 -76
  116. package/.vscode/settings.json +0 -6
  117. package/dev files/customConnector.js +0 -98
  118. package/dev files/dataverse.js +0 -120
  119. package/dev files/environmentVar.js +0 -55
  120. package/dev files/office365groups.js +0 -65
  121. package/dev files/office365users.js +0 -169
  122. package/dev files/outlook.js +0 -330
  123. package/dev files/power-apps-data.js +0 -2952
  124. package/examples/combined demo/.power/schemas/office365/office365.Schema.json +0 -21098
  125. package/examples/combined demo/.power/schemas/office365users/office365users.Schema.json +0 -2094
  126. package/examples/kanban/agent/decision-log.md +0 -9
  127. package/examples/kanban/agent/mockup-01-editorial-glass.html +0 -159
  128. package/examples/kanban/agent/mockup-02-dark-rail.html +0 -147
  129. package/examples/kanban/agent/mockup-03-paper-grid.html +0 -114
  130. package/examples/kanban/agent/mockup-04-neon-minimal.html +0 -141
  131. package/examples/kanban/agent/mockup-05-mono-architect.html +0 -119
  132. package/examples/kanban/dist/office365users.js +0 -169
  133. package/examples/kanban/src/generated/index.ts +0 -14
  134. package/examples/kanban/src/generated/models/Office365GroupsModel.ts +0 -363
  135. package/examples/kanban/src/generated/models/Office365OutlookModel.ts +0 -2046
  136. package/examples/kanban/src/generated/models/Office365UsersModel.ts +0 -254
  137. package/examples/kanban/src/generated/services/Office365GroupsService.ts +0 -326
  138. package/examples/kanban/src/generated/services/Office365OutlookService.ts +0 -2476
  139. package/examples/kanban/src/generated/services/Office365UsersService.ts +0 -358
  140. package/examples/outlook Demo2/agent/decision-log.md +0 -7
  141. package/examples/outlook Demo2/dist/index.html +0 -98
  142. package/examples/outlook Demo2/dist/index.js +0 -272
  143. package/examples/outlook Demo2/dist/styles.css +0 -639
  144. package/examples/outlook Demo2/power.config.json +0 -23
  145. package/examples/planning Poker/.vscode/settings.json +0 -5
  146. package/examples/sharePoint Demo/agent/decision-log.md +0 -17
  147. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/index.ts +0 -0
  148. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/models/Office365GroupsModel.ts +0 -0
  149. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/models/Office365OutlookModel.ts +0 -0
  150. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/models/Office365UsersModel.ts +0 -0
  151. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/services/Office365GroupsService.ts +0 -0
  152. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/services/Office365OutlookService.ts +0 -0
  153. /package/examples/{outlook Demo2 → apps/kanban}/src/generated/services/Office365UsersService.ts +0 -0
  154. /package/examples/{planning Poker → apps/planning Poker}/additional files/AgilePoker_1_0_0_1.zip +0 -0
  155. /package/examples/{planning Poker → apps/planning Poker}/additional files/PokerTables_1_0_0_1.zip +0 -0
  156. /package/examples/{outlook Demo2 → apps/solution explorer}/dist/icon-512.png +0 -0
  157. /package/examples/{outlook Demo2 → apps/solution explorer}/dist/power-apps-data.js +0 -0
  158. /package/examples/{todo → apps/todo}/dist/icon192.png +0 -0
@@ -0,0 +1,77 @@
1
+ ---
2
+ name: sharepoint
3
+ description: "Use when: building or debugging SharePoint list, library, file, or HTTP-request flows in a Power Apps Code App, including list-id or environment-variable-based setup."
4
+ ---
5
+
6
+ # SharePoint Connector Guide
7
+
8
+ > Agent limitation: do not use CLI commands directly from chat for SharePoint setup. Use the built-in Sync Connections and Deploy buttons instead.
9
+
10
+ ## Workflow
11
+
12
+ Before writing code, prefer these connection approaches:
13
+
14
+ - A: site URL + list ID
15
+ - B: environment variables that resolve the site URL and list ID
16
+
17
+ Do not ask the user for a list name as the primary CRUD identifier. If they only know the list name, use `listTables(...)` once to discover the connector table ID and then continue with list-ID operations.
18
+
19
+ ## power.config.json
20
+
21
+ Expose `sharepointonline` in `connectionReferences`.
22
+
23
+ ```json
24
+ {
25
+ "connectionReferences": {
26
+ "sharepointonline": {
27
+ "id": "/providers/Microsoft.PowerApps/apis/shared_sharepointonline",
28
+ "displayName": "SharePoint",
29
+ "dataSources": ["sharepointonline"],
30
+ "dataSets": {}
31
+ }
32
+ }
33
+ }
34
+ ```
35
+
36
+ No Dataverse tables are needed unless the app also uses environment variables.
37
+
38
+ ## Helper Surface
39
+
40
+ The wrapper in `dev files/sharepoint.js` exports:
41
+
42
+ - List ID pattern: `getItems`, `getSpItem`, `createSpItem`, `updateSpItem`, `deleteSpItem`
43
+ - Generic helpers: `callSharePointOperation`, `sendHttpRequest`, `listTables`, `listLibrary`
44
+ - File helpers: `createFile`, `updateFile`, `deleteFile`, `moveFile`, `getFileMetadata`
45
+
46
+ The list-ID helpers use the SharePoint connector table API. `sendHttpRequest(...)` remains available only as an advanced escape hatch when there is no dedicated helper for the operation you need.
47
+
48
+ ## Important Corrections
49
+
50
+ - The single-item and CRUD helpers for the list-ID path are `getSpItem`, `createSpItem`, `updateSpItem`, and `deleteSpItem` in this repo.
51
+ - `sharepoint.js` encodes `siteUrl` internally with `encodeURIComponent(...)`. Do not pre-encode the URL before passing it in.
52
+ - For environment-variable based setup, import `getEnvironmentVariable(...)` from `./codeapp.js`, not from a separate `environmentVar.js` helper.
53
+
54
+ ## Example Imports
55
+
56
+ Approach A:
57
+
58
+ ```js
59
+ import { getItems, getSpItem, createSpItem, updateSpItem, deleteSpItem, listTables } from './sharepoint.js';
60
+ ```
61
+
62
+ Approach B:
63
+
64
+ ```js
65
+ import { getItems, getSpItem, createSpItem, updateSpItem, deleteSpItem } from './sharepoint.js';
66
+ ```
67
+
68
+ Approach C:
69
+
70
+ ```js
71
+ import { getEnvironmentVariable } from './codeapp.js';
72
+ import { getItems, createSpItem, updateSpItem, deleteSpItem } from './sharepoint.js';
73
+ ```
74
+
75
+ ## Additional Build Nudge
76
+
77
+ When a SharePoint build introduces or depends on specific lists and columns, create an `agent/listSchema.json` artifact so the user can recreate the list structure correctly.
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: sql
3
+ description: "Use when: building or debugging SQL Server connector flows in a Power Apps Code App, including table discovery, row CRUD, native queries, or stored procedure execution."
4
+ ---
5
+
6
+ # SQL Server Connector Guide
7
+
8
+ > Agent limitation: do not use CLI commands directly from chat for SQL connector setup. Use the built-in Sync Connections and Deploy buttons instead.
9
+
10
+ ## Core Rule
11
+
12
+ The wrapper in `codeApp/dist/connectors/sql.js` is the repo-local source of truth.
13
+
14
+ - It retries the data-source names `sql`, `Sql`, and `SQL`.
15
+ - It includes inline metadata for the SQL actions it exposes.
16
+ - The Power Apps runtime special-cases `shared_sql`, so do not guess or hand-roll SQL connector paths.
17
+
18
+ ## power.config.json
19
+
20
+ Prefer a connection reference whose `dataSources` array contains `sql`.
21
+
22
+ ```json
23
+ {
24
+ "connectionReferences": {
25
+ "sqlConnection": {
26
+ "id": "/providers/Microsoft.PowerApps/apis/shared_sql",
27
+ "displayName": "SQL Server",
28
+ "dataSources": ["sql"],
29
+ "dataSets": {}
30
+ }
31
+ }
32
+ }
33
+ ```
34
+
35
+ The connection-reference object key can still vary by environment, but the exposed data-source name should stay aligned with the wrapper.
36
+
37
+ ## Public Helper Surface
38
+
39
+ The wrapper exports:
40
+
41
+ - `callSqlOperation(operationName, parameters)`
42
+ - `getSqlTables({ server, database })`
43
+ - `getSqlRows({ server, database, table, apply, filter, orderBy, skip, top, select })`
44
+ - `getSqlRow({ server, database, table, id })`
45
+ - `insertSqlRow({ server, database, table, item })`
46
+ - `updateSqlRow({ server, database, table, id, item })`
47
+ - `deleteSqlRow({ server, database, table, id })`
48
+ - `executeSqlQuery({ server, database, query })`
49
+ - `executeSqlStoredProcedure({ server, database, procedure, parameters })`
50
+
51
+ ## Supported Connector Actions
52
+
53
+ The wrapper currently maps to these SQL connector actions:
54
+
55
+ - `GetTables_V2`
56
+ - `GetItems_V2`
57
+ - `GetItem_V2`
58
+ - `PostItem_V2`
59
+ - `PatchItem_V2`
60
+ - `DeleteItem_V2`
61
+ - `ExecutePassThroughNativeQuery_V2`
62
+ - `ExecuteProcedure_V2`
63
+
64
+ ## Important Wrapper Behavior
65
+
66
+ - `server` and `database` default to `default` when not supplied.
67
+ - `getSqlRows(...)` maps the query options to OData-style connector fields such as `$apply`, `$filter`, `$orderby`, `$skip`, `$top`, and `$select`.
68
+ - Row CRUD helpers expect the SQL connector `table` value plus either `id` or `item`, depending on the operation.
69
+ - `executeSqlStoredProcedure(...)` normalizes `parameters` to `{}` when none are supplied.
70
+
71
+ ## Raw Calls
72
+
73
+ Use `callSqlOperation(operationName, parameters)` only when a dedicated helper does not already exist.
74
+
75
+ Do not invent:
76
+
77
+ - SQL action names
78
+ - parameter field names
79
+ - runtime URL shapes for `shared_sql`
80
+
81
+ ## Debugging
82
+
83
+ - If the failure mentions a missing connection reference, confirm the app exposes `sql` in `power.config.json`.
84
+ - If the request reaches the connector but returns a path or dataset error, double-check that the code is using the wrapper helpers instead of handwritten SQL action paths.
85
+ - If table reads work but stored procedures do not, verify the wrapper is being passed `procedure` and `parameters` rather than a raw request body shape.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: frontend-design
3
+ description: Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
4
+ ---
5
+
6
+ # Frontend Design Skill
7
+
8
+ This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.
9
+
10
+ The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.
11
+
12
+ ## Design Thinking
13
+
14
+ Before coding, understand the context and commit to a BOLD aesthetic direction:
15
+
16
+ - **Purpose:** What problem does this interface solve? Who uses it?
17
+ - **Tone:** Pick an extreme: brutally minimal, maximalist chaos, retro-futuristic, organic/natural, luxury/refined, playful/toy-like, editorial/magazine, brutalist/raw, art deco/geometric, soft/pastel, industrial/utilitarian, etc. There are so many flavors to choose from. Use these for inspiration but design one that is true to the aesthetic direction.
18
+ - **Constraints:** Technical requirements (framework, performance, accessibility).
19
+ - For CAP code apps, treat workspace configuration and loaded skills as the source of truth for technical constraints. If `power.config.json` or the agent prompt already fixes the stack, connector, or app name, do not ask the user to restate them.
20
+ - **Differentiation:** What makes this UNFORGETTABLE? What's the one thing someone will remember?
21
+
22
+ **CRITICAL:** Choose a clear conceptual direction and execute it with precision. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.
23
+
24
+ Then implement working code in the project's required stack. Default to plain HTML/CSS/JS when the workspace instructions or agent prompt do not explicitly require a framework. Do not ask the user to choose React, Vue, or another framework unless the project requirements are genuinely ambiguous.
25
+
26
+ - Production-grade and functional
27
+ - Visually striking and memorable
28
+ - Cohesive with a clear aesthetic point-of-view
29
+ - Meticulously refined in every detail
30
+
31
+ ## Frontend Aesthetics Guidelines
32
+
33
+ Focus on:
34
+
35
+ - **Typography:** Choose fonts that are beautiful, unique, and interesting. Avoid generic fonts like Arial and Inter; opt instead for distinctive choices that elevate the frontend's aesthetics; unexpected, characterful font choices. Pair a distinctive display font with a refined body font.
36
+ - **Color & Theme:** Commit to a cohesive aesthetic. Use CSS variables for consistency. Dominant colors with sharp accents outperform timid, evenly-distributed palettes.
37
+ - **Motion:** Use animations for effects and micro-interactions. Prioritize CSS-only solutions for HTML. Only use framework-specific animation libraries when the project already uses that framework. Focus on high-impact moments: one well-orchestrated page load with staggered reveals (animation-delay) creates more delight than scattered micro-interactions. Use scroll-triggering and hover states that surprise.
38
+ - **Spatial Composition:** Unexpected layouts. Asymmetry. Overlap. Diagonal flow. Grid-breaking elements. Generous negative space OR controlled density.
39
+ - **Backgrounds & Visual Details:** Create atmosphere and depth rather than defaulting to solid colors. Add contextual effects and textures that match the overall aesthetic. Apply creative forms like gradient meshes, noise textures, geometric patterns, layered transparencies, dramatic shadows, decorative borders, custom cursors, and grain overlays.
40
+ NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.
41
+
42
+ Interpret creatively and make unexpected choices that feel genuinely designed for the context. No design should be the same. Vary between light and dark themes, different fonts, different aesthetics. NEVER converge on common choices (Space Grotesk, for example) across generations.
43
+
44
+ IMPORTANT: Match implementation complexity to the aesthetic vision. Maximalist designs need elaborate code with extensive animations and effects. Minimalist or refined designs need restraint, precision, and careful attention to spacing, typography, and subtle details. Elegance comes from executing the vision well.
45
+
46
+ Remember: Claude is capable of extraordinary creative work. Don't hold back, show what can truly be created when thinking outside the box and committing fully to a distinctive vision.
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: teams
3
+ description: "Use when: building or debugging Microsoft Teams connector flows in a Power Apps Code App, including teams, channels, chats, mentions, notifications, message posting, or the Teams HttpRequest helper."
4
+ ---
5
+
6
+ # Microsoft Teams Connector Guide
7
+
8
+ > Agent limitation: do not use CLI commands directly from chat for Teams setup. Use the built-in Sync Connections and Deploy buttons instead.
9
+
10
+ ## Core Rule
11
+
12
+ The wrapper in `dev files/teams.js` is the repo-local source of truth.
13
+
14
+ - It retries `teams`, `Teams`, `microsoftteams`, and `MicrosoftTeams`.
15
+ - It includes inline metadata for the operations it exposes.
16
+ - There is no need to guess connector paths when the helper already defines them.
17
+
18
+ ## power.config.json
19
+
20
+ Prefer a connection reference whose `dataSources` array includes `teams`.
21
+
22
+ The connection-reference object key can still be an environment-specific id, but the data-source name exposed to the connector should stay aligned with the wrapper.
23
+
24
+ ## Public Helper Surface
25
+
26
+ The wrapper exports:
27
+
28
+ - `listTeams()`
29
+ - `listChannels(teamId)`
30
+ - `getTeam(teamId)`
31
+ - `getChannelDetails(teamId, channelId)`
32
+ - `addMemberToTeam(teamId, body)`
33
+ - `addMemberToChannel(teamId, channelId, body)`
34
+ - `getUserMentionToken(userId)`
35
+ - `getTeamTagMentionToken(teamId, tagId)`
36
+ - `listChats({ top, skip })`
37
+ - `listMembers(teamId, channelId)`
38
+ - `postFeedNotification({ groupId, body })`
39
+ - `postCardInChatOrChannel({ poster, location, body })`
40
+ - `postMessageInChatOrChannel({ poster, location, body })`
41
+ - `sendTeamsGraphHttpRequest({ method, uri, headers, body })`
42
+ - `callTeamsOperation(operationName, parameters)`
43
+
44
+ ## Important Wrapper Behavior
45
+
46
+ - `postFeedNotification(...)` chooses `PostChannelNotification` when `groupId` is present and `PostUserNotification` otherwise.
47
+ - Chat pagination uses `$top` and `$skip`.
48
+ - Mention helpers return the connector-formatted mention token payload; do not hand-roll those shapes.
49
+ - `sendTeamsGraphHttpRequest(...)` still uses the Teams connector `HttpRequest` action, not direct Graph auth.
50
+
51
+ ## Debugging
52
+
53
+ - If the failure mentions missing `path`, the operation name does not match the inline Teams metadata.
54
+ - If the failure mentions connection reference lookup, confirm the app exposes `teams` in `power.config.json`.
55
+ - Keep the wrapper candidate names intact when supporting older apps.