@agent-native/core 0.214.0 → 0.217.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/dist/action.js +54 -1
- package/dist/agent/actions/disconnect-chatgpt-subscription.js +5 -0
- package/dist/agent/actions/get-agentkit-capabilities.js +3 -3
- package/dist/agent/actions/manage-builder-connection.js +5 -0
- package/dist/agent/actions/manage-provider-key-policy.js +5 -0
- package/dist/agent/actions/manage-provider-models.js +5 -0
- package/dist/agent/actions/manage-service-providers.js +5 -0
- package/dist/agent/actions/select-chatgpt-subscription-account.js +5 -0
- package/dist/agent/context-xray/actions/context-evict.js +5 -0
- package/dist/agent/context-xray/actions/context-pin.js +5 -0
- package/dist/agent/context-xray/actions/context-report.js +5 -0
- package/dist/agent/context-xray/actions/context-restore.js +5 -0
- package/dist/agent/execution-fence.d.ts +1 -0
- package/dist/agent/execution-fence.js +5 -0
- package/dist/agent/production-agent.d.ts +35 -2
- package/dist/agent/production-agent.js +629 -32
- package/dist/agent/run-manager.d.ts +2 -0
- package/dist/agent/run-manager.js +397 -115
- package/dist/agent/run-slot-lock.d.ts +2 -0
- package/dist/agent/run-slot-lock.js +6 -0
- package/dist/agent/run-store.d.ts +5 -0
- package/dist/agent/run-store.js +423 -156
- package/dist/agent/thread-data-builder.js +27 -5
- package/dist/agent/types.d.ts +6 -12
- package/dist/agentkit/capabilities.d.ts +1 -1
- package/dist/app-config/analytics.js +1 -1
- package/dist/application-state/store.d.ts +5 -0
- package/dist/application-state/store.js +26 -0
- package/dist/automation/index.d.ts +1 -1
- package/dist/chat-threads/schema-migrations.js +17 -0
- package/dist/chat-threads/store.d.ts +21 -1
- package/dist/chat-threads/store.js +223 -41
- package/dist/cli/skills-content/turn-into-app-skill.d.ts +1 -1
- package/dist/cli/skills-content/turn-into-app-skill.js +20 -18
- package/dist/cli/templates-meta.js +14 -0
- package/dist/client/analytics-session.d.ts +7 -0
- package/dist/client/analytics-session.js +27 -1
- package/dist/client/analytics.js +276 -31
- package/dist/client/chat/agentkit-agent-native.js +79 -3
- package/dist/client/chat/agentkit-protocol.js +80 -42
- package/dist/client/chat/runtime.d.ts +5 -1
- package/dist/client/chat/runtime.js +46 -3
- package/dist/client/consent.d.ts +48 -0
- package/dist/client/consent.js +413 -0
- package/dist/client/onboarding/index.d.ts +1 -0
- package/dist/client/onboarding/index.js +1 -0
- package/dist/client/onboarding/use-onboarding-checklist.d.ts +23 -0
- package/dist/client/onboarding/use-onboarding-checklist.js +115 -0
- package/dist/client/review/use-review.d.ts +2 -0
- package/dist/client/review/use-review.js +28 -1
- package/dist/client/session-replay.d.ts +1 -1
- package/dist/client/session-replay.js +142 -3
- package/dist/client/sharing/useResourceAccessGate.d.ts +3 -2
- package/dist/client/sharing/useResourceAccessGate.js +9 -1
- package/dist/client/use-chat-thread-list.d.ts +2 -0
- package/dist/client/use-chat-thread-list.js +12 -2
- package/dist/client/use-chat-threads.d.ts +1 -0
- package/dist/client/use-chat-threads.js +2 -0
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/connections/catalog.d.ts +5 -5
- package/dist/connections/catalog.js +22 -3
- package/dist/data-widgets/index.d.ts +36 -2
- package/dist/data-widgets/index.js +94 -6
- package/dist/db/migrations.js +4 -1
- package/dist/db/schema-snapshot.generated.js +8 -1
- package/dist/feature-flags/actions/set-feature-flag.js +5 -0
- package/dist/feature-flags/index.d.ts +1 -1
- package/dist/feature-flags/index.js +1 -1
- package/dist/feature-flags/store.d.ts +12 -0
- package/dist/feature-flags/store.js +79 -7
- package/dist/file-upload/actions/manage-file-storage.js +5 -0
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.js +5 -0
- package/dist/history/actions/create-resource-version.js +5 -0
- package/dist/history/actions/restore-resource-version.js +5 -0
- package/dist/ingestion/index.d.ts +1 -1
- package/dist/ingestion/index.js +1 -1
- package/dist/ingestion/pptx.d.ts +11 -0
- package/dist/ingestion/pptx.js +81 -1
- package/dist/integrations/actions/manage-messaging-channel.js +5 -0
- package/dist/jobs/actions/manage-recurring-job.d.ts +1 -1
- package/dist/jobs/scheduler.js +17 -1
- package/dist/labs/actions/set-lab.js +5 -0
- package/dist/localization/actions/set-localization-preference.js +5 -0
- package/dist/localization/consent-banner-messages.d.ts +16 -0
- package/dist/localization/consent-banner-messages.js +149 -0
- package/dist/localization/core-messages.js +4 -0
- package/dist/localization/default-messages.d.ts +1 -0
- package/dist/localization/default-messages.js +2 -0
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/notifications/routes.d.ts +2 -2
- package/dist/observability/actions/save-observability-instruction-update.js +5 -0
- package/dist/observability/actions/save-observability-review-summary.js +5 -0
- package/dist/observability/routes.d.ts +6 -6
- package/dist/onboarding/index.d.ts +2 -1
- package/dist/onboarding/index.js +1 -0
- package/dist/onboarding/plugin.js +55 -46
- package/dist/onboarding/status.d.ts +15 -0
- package/dist/onboarding/status.js +59 -0
- package/dist/onboarding/types.d.ts +12 -0
- package/dist/onboarding/types.js +2 -1
- package/dist/org/workspace-app-access.js +19 -9
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +16 -16
- package/dist/provider-api/actions/provider-api.d.ts +11 -11
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/provider-api/index.js +9 -2
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/review/actions/consume-review-feedback.js +5 -0
- package/dist/review/actions/create-review-comment.js +5 -0
- package/dist/review/actions/delete-review-comment.js +5 -0
- package/dist/review/actions/react-to-review-comment.js +5 -0
- package/dist/review/actions/reply-review-comment.js +5 -0
- package/dist/review/actions/resolve-review-thread.js +5 -0
- package/dist/review/actions/send-review-thread-to-agent.js +5 -0
- package/dist/review/actions/set-review-status.js +5 -0
- package/dist/review/actions/set-review-thread-muted.js +5 -0
- package/dist/review/actions/set-review-thread-unread.js +5 -0
- package/dist/review/actions/set-review-threads-unread.js +5 -0
- package/dist/review/actions/update-review-comment-anchor.js +5 -0
- package/dist/review/actions/update-review-comment.js +5 -0
- package/dist/review/suggestions/actions.js +60 -21
- package/dist/review/suggestions/store.d.ts +2 -0
- package/dist/review/suggestions/store.js +28 -0
- package/dist/secrets/actions/delete-api-key.js +5 -0
- package/dist/secrets/routes.d.ts +6 -6
- package/dist/server/agent-capabilities.js +13 -6
- package/dist/server/agent-chat/context-tools.js +63 -2
- package/dist/server/agent-chat-plugin.d.ts +2 -0
- package/dist/server/agent-chat-plugin.js +242 -54
- package/dist/server/agent-engine-default-model-route.d.ts +1 -1
- package/dist/server/agent-engine-ollama-models-route.d.ts +1 -1
- package/dist/server/analytics.d.ts +0 -1
- package/dist/server/analytics.js +81 -20
- package/dist/server/application-state-maintenance.d.ts +2 -0
- package/dist/server/application-state-maintenance.js +2 -0
- package/dist/server/attribution.d.ts +14 -0
- package/dist/server/attribution.js +62 -2
- package/dist/server/auth.js +7 -0
- package/dist/server/builder-api-auth.d.ts +7 -0
- package/dist/server/builder-api-auth.js +24 -0
- package/dist/server/builder-oauth.d.ts +5 -1
- package/dist/server/builder-oauth.js +5 -0
- package/dist/server/consent-route.d.ts +41 -0
- package/dist/server/consent-route.js +102 -0
- package/dist/server/core-routes-plugin.d.ts +1 -1
- package/dist/server/first-touch-route.d.ts +39 -0
- package/dist/server/first-touch-route.js +115 -0
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +2 -1
- package/dist/server/queued-submission-inbox-drain.d.ts +9 -0
- package/dist/server/queued-submission-inbox-drain.js +12 -0
- package/dist/server/request-origin.d.ts +6 -0
- package/dist/server/request-origin.js +12 -0
- package/dist/settings/org-settings.d.ts +2 -1
- package/dist/settings/org-settings.js +4 -1
- package/dist/settings/store.d.ts +8 -0
- package/dist/settings/store.js +14 -5
- package/dist/shared/consent.d.ts +33 -0
- package/dist/shared/consent.js +149 -0
- package/dist/shared/first-touch-persistence.d.ts +31 -0
- package/dist/shared/first-touch-persistence.js +53 -0
- package/dist/sharing/actions/set-resource-visibility.js +5 -0
- package/dist/sharing/actions/share-resource.js +5 -0
- package/dist/sharing/actions/unshare-resource.js +5 -0
- package/dist/templates/chat/.agents/skills/actions/references/action-fields.md +1 -1
- package/dist/templates/default/.agents/skills/actions/references/action-fields.md +1 -1
- package/dist/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +36 -80
- package/dist/templates/factory/.agents/skills/review-latest-feedback/references/channel-inventory.md +54 -16
- package/dist/templates/factory/.agents/skills/review-latest-feedback/references/slack-reaction-replies.md +50 -73
- package/dist/templates/headless/.agents/skills/actions/references/action-fields.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/actions/references/action-fields.md +1 -1
- package/dist/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +20 -18
- package/dist/triggers/actions/manage-automation.d.ts +4 -4
- package/dist/usage/actions/get-usage-metrics.js +27 -4
- package/dist/usage/actions/manage-usage-alert.js +5 -0
- package/dist/vite/client.js +8 -6
- package/dist/workspace-connections/actions/bulk-update-workspace-user-groups.js +5 -0
- package/dist/workspace-connections/actions/delete-workspace-user-group.js +5 -0
- package/dist/workspace-connections/actions/upsert-workspace-user-group.js +5 -0
- package/docs/content/actions-access-control.mdx +8 -8
- package/docs/content/actions-defining.mdx +9 -8
- package/docs/content/deployment-environment-variables.mdx +1 -1
- package/docs/content/environment-variables.mdx +1 -1
- package/docs/content/template-design-developers.mdx +9 -9
- package/docs/content/template-design-features.mdx +1 -3
- package/docs/content/turn-into-app.mdx +4 -0
- package/package.json +6 -3
- package/src/templates/chat/.agents/skills/actions/references/action-fields.md +1 -1
- package/src/templates/default/.agents/skills/actions/references/action-fields.md +1 -1
- package/src/templates/factory/.agents/skills/review-latest-feedback/SKILL.md +36 -80
- package/src/templates/factory/.agents/skills/review-latest-feedback/references/channel-inventory.md +54 -16
- package/src/templates/factory/.agents/skills/review-latest-feedback/references/slack-reaction-replies.md +50 -73
- package/src/templates/headless/.agents/skills/actions/references/action-fields.md +1 -1
- package/src/templates/workspace-core/.agents/skills/actions/references/action-fields.md +1 -1
- package/src/templates/workspace-core/.agents/skills/turn-into-app/SKILL.md +20 -18
package/src/templates/factory/.agents/skills/review-latest-feedback/references/channel-inventory.md
CHANGED
|
@@ -329,10 +329,26 @@ chase arrivals or expand a finite catch-up request into an all-history audit.
|
|
|
329
329
|
administrative post or duplicate; record the reason and link a duplicate to
|
|
330
330
|
its canonical report. Include
|
|
331
331
|
the root `threadParentTs`, reply timestamp, author ID, matching disposition,
|
|
332
|
-
evidence, and read-back text.
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
332
|
+
evidence, and read-back text. Keep exact scope, proof, and handoff details in
|
|
333
|
+
the ledger. For `Owned elsewhere`, keep the owner's full proof in
|
|
334
|
+
`otherOwnerEvidence.statusReply.evidence`; set its `publicEvidenceSummary` to
|
|
335
|
+
a brief plain-language phrase (2–12 words) that appears in both the evidence
|
|
336
|
+
and the owner's captured reply. Do not require the full internal evidence in
|
|
337
|
+
their Slack text. For active `🎫` actions, add a short plain-language
|
|
338
|
+
`pendingActionSummary` to `statusReply` that names every open action and its
|
|
339
|
+
known owner, and include it in the reply; omit it when no tracked action
|
|
340
|
+
remains open. Keep the exact action in the internal ledger. When that wording
|
|
341
|
+
is too technical or long for Slack, add a
|
|
342
|
+
concise plain-language `publicActionSummary` using the opening words of the
|
|
343
|
+
action and leaving trailing implementation detail out. It must have at least
|
|
344
|
+
two meaningful words and no more than 12 words; the checker requires the
|
|
345
|
+
phrase to match the action. Use the summary in public status replies and
|
|
346
|
+
other readbacks that do not prove owner acceptance. For an accepted handoff,
|
|
347
|
+
the owner's explicit acceptance and the direct request before contextual
|
|
348
|
+
assent must name the full recorded action, even when a shorter public
|
|
349
|
+
summary exists. Every
|
|
350
|
+
distinct unfinished team action gets this actor's root `🎫`, even when no
|
|
351
|
+
person has accepted it. For `status: "unassigned"`, record the responsible team/role or
|
|
336
352
|
`unassigned`; omit the owner Slack ID and acceptance. If this actor asked a
|
|
337
353
|
named person to take the action but they have not accepted, record the exact
|
|
338
354
|
request and keep the handoff unassigned. For `status: "accepted"` or
|
|
@@ -363,7 +379,19 @@ chase arrivals or expand a finite catch-up request into an all-history audit.
|
|
|
363
379
|
replies and bot messages. The status reply must be newer than this human
|
|
364
380
|
reply. If a human answers later, update the disposition and status before
|
|
365
381
|
reconciling it.
|
|
366
|
-
Record each verified `fixedScopes` entry with its proof
|
|
382
|
+
Record each verified `fixedScopes` entry with its proof. For a status with
|
|
383
|
+
fixed scopes, also set `statusReply.publicEvidenceSummary` to a brief,
|
|
384
|
+
plain-language phrase (2–12 words) that can appear in the public reply. For
|
|
385
|
+
every fixed scope, put that scope and the summary together in one sentence of
|
|
386
|
+
its `verification`. Include the summary in both `statusReply.evidence` and
|
|
387
|
+
the captured `statusReply.text`; keep detailed proof in the ledger. The
|
|
388
|
+
summary may paraphrase the internal scope. Record each
|
|
389
|
+
`unfinishedScopes` entry in the ledger. When any remain, set
|
|
390
|
+
`statusReply.unfinishedScopeSummary` to a brief plain-language summary
|
|
391
|
+
(3–12 words) that names remaining work using wording grounded in its recorded
|
|
392
|
+
scope or evidence, and says it is still open; include it in the public status
|
|
393
|
+
even when no separate `🎫` action exists. Omit this field when no unfinished
|
|
394
|
+
scope remains. Record each
|
|
367
395
|
unfinished team/engineering action in `handoffs[]` and each outstanding
|
|
368
396
|
reporter input request in `reporterRequests[]` with its scope, exact action,
|
|
369
397
|
and exact `requestReply`. For
|
|
@@ -386,9 +414,9 @@ chase arrivals or expand a finite catch-up request into an all-history audit.
|
|
|
386
414
|
action is completed, keep it in `handoffs[]` with
|
|
387
415
|
`status: "completed"` and `completion: { evidence, sourceUrl }` or an exact
|
|
388
416
|
owner `reply` (`ts`, `threadParentTs`, `actorId`, and verbatim `text`). The
|
|
389
|
-
|
|
390
|
-
history; completed actions are not open follow-ups and do not block a
|
|
391
|
-
disposition. Only an owner withdrawal moves an accepted action to
|
|
417
|
+
`statusReply.evidence` must cite that completion evidence. Keep the root
|
|
418
|
+
`🎫` as history; completed actions are not open follow-ups and do not block a
|
|
419
|
+
closed disposition. Only an owner withdrawal moves an accepted action to
|
|
392
420
|
`historicalReactionMarks[]`. As soon as direct post-change proof passes, add this actor's
|
|
393
421
|
`✅` to the root and read it back before moving to another scope or report,
|
|
394
422
|
including while its PR is open. Before merge, record **Verified locally** and
|
|
@@ -403,9 +431,10 @@ chase arrivals or expand a finite catch-up request into an all-history audit.
|
|
|
403
431
|
mark remains as history after completion. For an eligible open scope this
|
|
404
432
|
workflow takes, retain the root `👀` as permanent history; do not use it to
|
|
405
433
|
infer whether work remains.
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
434
|
+
Keep the same-thread status reply to one short, plain-language paragraph.
|
|
435
|
+
Say what changed; when an active `🎫` remains, name its next action through
|
|
436
|
+
`pendingActionSummary`. Do not list every scope or explain absent reactions.
|
|
437
|
+
A reply does not replace a
|
|
409
438
|
reaction, and a reaction does not replace a reply. Do not add status
|
|
410
439
|
requirements or reactions to another actor's eye. When later evidence
|
|
411
440
|
invalidates a retained `✅`, remove that scope from active `fixedScopes[]`
|
|
@@ -415,9 +444,17 @@ chase arrivals or expand a finite catch-up request into an all-history audit.
|
|
|
415
444
|
withdraws, move that action out of current `handoffs[]` and record a historical
|
|
416
445
|
`🎫` with its earlier accepted `handoff` plus the owner's exact
|
|
417
446
|
`withdrawalReply` (`ts`, `threadParentTs`, `actorId`, and verbatim `text`).
|
|
418
|
-
|
|
419
|
-
preserve it without presenting it as current proof or an active
|
|
420
|
-
|
|
447
|
+
Record why each retained mark is historical in the internal reaction
|
|
448
|
+
decision; preserve it without presenting it as current proof or an active
|
|
449
|
+
handoff. Keep detailed proof in `previousStatus.evidence` in the internal
|
|
450
|
+
ledger. For a historical `✅`, also record a brief, non-sensitive
|
|
451
|
+
`publicEvidenceSummary` (2–12 words) drawn from that proof. It may paraphrase
|
|
452
|
+
the exact scope, but the scope and summary must appear together in one proof
|
|
453
|
+
sentence. Include the summary in the captured `previousStatus.text`; the
|
|
454
|
+
checker verifies that it is tied to proof for the recorded scope.
|
|
455
|
+
Never put secrets, customer details, or raw logs in the summary. For a
|
|
456
|
+
historical `🎫`, the prior reply must name both the accepted action and its
|
|
457
|
+
owner. The checker validates these details against the captured thread. When every report scope
|
|
421
458
|
and follow-up is closed, post or reuse the final same-thread status and read
|
|
422
459
|
back the status and reactions. Preserve every reaction; disposition and
|
|
423
460
|
status show that work is closed even when the root still has `👀`.
|
|
@@ -481,8 +518,9 @@ back `🎫` even when it is unassigned or unaccepted. Record acceptance only
|
|
|
481
518
|
after a named person's exact reply; otherwise state `owner: unassigned` and
|
|
482
519
|
`status: unassigned`. For reporter evidence, access, or clarification
|
|
483
520
|
requests, record `reporterRequests[]` and add/read back `🎫`; explain that it
|
|
484
|
-
tracks requested input, not a team handoff. In the
|
|
485
|
-
exact proof gap, blocker, and next owner/action.
|
|
521
|
+
tracks requested input, not a team handoff. In the internal ledger, record the
|
|
522
|
+
exact proof gap, blocker, and next owner/action. Keep the current status brief
|
|
523
|
+
and plain-language. An
|
|
486
524
|
eye-only root with unfinished work is pending; an eye-only root with a closed
|
|
487
525
|
verified disposition may retain the eye as history. Never remove or clean up a
|
|
488
526
|
reaction. Slack thread replies appear under the root's reply count, not as
|
|
@@ -13,53 +13,35 @@ record as history; the root remains held without a thread read or status reply.
|
|
|
13
13
|
Capture
|
|
14
14
|
the exact Slack actor ID used by the connected tool at sweep start. A mark is
|
|
15
15
|
owned by this task only when its reaction owner ID matches that actor ID. Each
|
|
16
|
-
unheld owned root needs a current
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
not fixed, unfixed, or broken. Use `Partially fixed` while any distinct scope
|
|
26
|
-
remains unfinished or a human/team handoff is still `unassigned` or `accepted`.
|
|
27
|
-
A completed handoff is retained history, not an open follow-up.
|
|
28
|
-
This is one current status reply per owned root, not a reply on every sweep.
|
|
29
|
-
Reuse the existing same-actor reply while its disposition and evidence remain
|
|
30
|
-
current; send an update when either materially changes. For a recent
|
|
31
|
-
unanswered reporter question, reuse the existing same-actor question/update as
|
|
32
|
-
the status reply when it states the disposition and evidence. If it does not,
|
|
33
|
-
post at most one concise status update that points to the existing unanswered
|
|
34
|
-
question without asking it again; then wait silently. Do not send another
|
|
35
|
-
question or progress ping before the four-day rule below. When a disposition
|
|
36
|
-
includes human handoffs, the status reply must name each handoff's recorded
|
|
37
|
-
owner and action; include its scope when the report context does not make it
|
|
38
|
-
clear.
|
|
16
|
+
unheld owned root needs a current same-actor status reply under the same parent.
|
|
17
|
+
Reuse it while the disposition remains current; send one short update when it
|
|
18
|
+
materially changes. Write one short sentence in plain, non-technical language,
|
|
19
|
+
then end with the exact bot disclosure
|
|
20
|
+
`this was sent from a bot.` Say what changed. Use `🎫` only for unresolved
|
|
21
|
+
work; when it is used, briefly say what still needs investigation or action and
|
|
22
|
+
name its owner when known. Do not explain absent reactions or mention a closed,
|
|
23
|
+
historical `🎫`. Keep scope, evidence, and handoff details in the internal
|
|
24
|
+
ledger.
|
|
39
25
|
|
|
40
|
-
|
|
26
|
+
Do not send a routine second reply just to announce a merge or publication.
|
|
41
27
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
answer, or four-day abandonment; label it historical in the current reply
|
|
50
|
-
and inventory when it no longer blocks progress.
|
|
28
|
+
For a recent unanswered reporter question, reuse the existing same-actor
|
|
29
|
+
question/update as the status reply when it still reflects the disposition. If
|
|
30
|
+
it does not, post at most one concise update that points to the question
|
|
31
|
+
without asking it again; then wait silently. Do not send another question or
|
|
32
|
+
progress ping before the four-day rule below. An evidence-only addendum or
|
|
33
|
+
correction is not a current status; edit it into a concise disposition when
|
|
34
|
+
possible, or send one status after the latest human reply.
|
|
51
35
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
and each `🎫` action with its owner or why none applies. Keep the exact bot
|
|
62
|
-
disclosure and read the visible final reply and root reactions back.
|
|
36
|
+
Keep full proof, scope, and handoff details in the internal ledger. When an
|
|
37
|
+
active `🎫` action remains, record its brief plain-language summary as
|
|
38
|
+
`statusReply.pendingActionSummary` and include that summary in the short reply.
|
|
39
|
+
When `unfinishedScopes` is nonempty, also record a brief
|
|
40
|
+
`statusReply.unfinishedScopeSummary` that names remaining work using wording
|
|
41
|
+
grounded in its recorded scope or evidence and says it is still open; include it
|
|
42
|
+
in the public reply even when there is no active `🎫`.
|
|
43
|
+
Do not explain absent reactions or list every scope. End with the exact bot
|
|
44
|
+
disclosure and read the visible reply and root reactions back.
|
|
63
45
|
|
|
64
46
|
When editing an ordinary Slack reply, pass its visible body as
|
|
65
47
|
`message.markdown_text` to `slack_edit_message`; `message.text` is a fallback
|
|
@@ -166,7 +148,8 @@ then immediately update and read back each applicable root reaction before
|
|
|
166
148
|
advancing to the next report. Add `✅` as soon as any reported scope passes the
|
|
167
149
|
direct post-change proof bar, including before merge; use
|
|
168
150
|
**Partially fixed** for the overall disposition when another scope remains,
|
|
169
|
-
and
|
|
151
|
+
and record both scopes in the internal ledger. Keep the reply short; do not
|
|
152
|
+
wait for an entire
|
|
170
153
|
multi-symptom report to be resolved before checking off its verified scope.
|
|
171
154
|
Keep all existing reactions after scopes close. Post the final disposition and
|
|
172
155
|
read back the final reply and reactions; the status shows closure while the
|
|
@@ -174,7 +157,7 @@ eye remains as history. Never remove or clean up any reaction. An open PR can
|
|
|
174
157
|
earn `✅` as soon as the relevant
|
|
175
158
|
`verifying-changes` proof bar passes. During that period, `✅` marks the
|
|
176
159
|
verified scope and `👀` may remain whether or not another scope or merge is
|
|
177
|
-
open; the marks are independent. The
|
|
160
|
+
open; the marks are independent. The internal ledger records what remains.
|
|
178
161
|
For UI behavior, a focused
|
|
179
162
|
regression qualifies only if it exercises the changed component and asserts the
|
|
180
163
|
reported visible result or persisted state; callback-only assertions, mocked
|
|
@@ -182,24 +165,28 @@ children, class-name checks, and source inspection do not. For clipping,
|
|
|
182
165
|
wrapping, contrast, or alignment, inspect rendered geometry at the reported
|
|
183
166
|
viewport or replay the flow in the running app. Use an app/preview replay when
|
|
184
167
|
the regression does not meet that bar. For non-UI scopes, use the area-specific
|
|
185
|
-
action, query, or test proof.
|
|
186
|
-
checkmark records
|
|
168
|
+
action, query, or test proof. Record merge or rollout state in the internal
|
|
169
|
+
ledger; the checkmark records verified scope and does not claim it is shipped
|
|
170
|
+
or live.
|
|
187
171
|
Before leaving each report, compare verified scopes and human/team handoffs
|
|
188
172
|
with a fresh root-reaction read. Ensure one `✅` is present when any scope passed the
|
|
189
173
|
proof bar and one `🎫` whenever any distinct unfinished action requires another
|
|
190
174
|
person or team to act, even before ownership is assigned or accepted. Keep the
|
|
191
175
|
mark as history after completion; read back each changed root reaction and
|
|
192
|
-
verify its owner.
|
|
193
|
-
|
|
176
|
+
verify its owner. Record why a mark is absent in the internal ledger. Never
|
|
177
|
+
explain absent `👀` or `✅` in a Slack reply. Emoji text in a reply is not a
|
|
194
178
|
reaction. Preserve every existing reaction. If later proof invalidates a prior
|
|
195
179
|
checkmark, move that scope out of active `fixedScopes[]` and add a
|
|
196
180
|
`historicalReactionMarks[]` entry with `emoji`, `scope`, `reason`, and the exact
|
|
197
|
-
prior `previousStatus`; the
|
|
198
|
-
|
|
181
|
+
prior `previousStatus`; keep the explanation in the internal ledger rather
|
|
182
|
+
than the Slack reply. If the owner withdraws an accepted action
|
|
199
183
|
tracked by `🎫`, also preserve the exact earlier accepted `handoff` and owner
|
|
200
|
-
`withdrawalReply`, move it out of current `handoffs[]
|
|
201
|
-
in the
|
|
202
|
-
|
|
184
|
+
`withdrawalReply`, and move it out of current `handoffs[]`. Keep that history
|
|
185
|
+
in the internal ledger. Preserve the recorded evidence and historical action in
|
|
186
|
+
the ledger; do not repeat a closed handoff in Slack unless a current action
|
|
187
|
+
remains. When a recorded action has a validated `publicActionSummary`, it may
|
|
188
|
+
be used for a current `🎫` summary. The checker validates it against the
|
|
189
|
+
recorded action and captured thread; never remove or clean up a reaction.
|
|
203
190
|
Add `🎫` for each distinct unfinished team or engineering action that another
|
|
204
191
|
person or team must perform outside this workflow, whether or not a named
|
|
205
192
|
person has accepted it or an external tracker ticket exists. Record each such
|
|
@@ -245,8 +232,9 @@ Keep its original `scope`, `action`, `requestReply`, and ticket-bearing
|
|
|
245
232
|
`resolution: "answered"` and include the exact human `closureReply` from the
|
|
246
233
|
same thread. For an unanswered request,
|
|
247
234
|
set `resolution: "abandoned_no_answer"` only after four days with no later human
|
|
248
|
-
reply, and omit `closureReply`. The
|
|
249
|
-
action and explain why its mark remains
|
|
235
|
+
reply, and omit `closureReply`. The internal ledger must identify the
|
|
236
|
+
historical action and explain why its mark remains; do not explain it in the
|
|
237
|
+
Slack reply unless a current follow-up remains. Link an external tracker ticket only
|
|
250
238
|
if one already exists; do not create or promise one without authorization. If a
|
|
251
239
|
human later refuses the accepted action, preserve `🎫` as history and update
|
|
252
240
|
the status with the refusal and blocker.
|
|
@@ -282,10 +270,11 @@ do not send a second owner update. If another task owns it or ownership is
|
|
|
282
270
|
unclear, preserve the eye, record the source in the ledger, and stop. Keep
|
|
283
271
|
distinct scopes and their status clear.
|
|
284
272
|
|
|
285
|
-
Compare each reported symptom with the evidence.
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
273
|
+
Compare each reported symptom with the evidence. If the report is only partly
|
|
274
|
+
fixed, say so briefly and keep the scope details in the ledger. Use one root
|
|
275
|
+
`✅` when at least one fixed scope is verified; it covers every
|
|
276
|
+
verified scope listed in `fixedScopes[]`, which the internal ledger must name
|
|
277
|
+
with its proof. Use one root `🎫` whenever at least one distinct unfinished action
|
|
289
278
|
requires another person to act; it covers the actions listed in `handoffs[]`
|
|
290
279
|
and active requests in `reporterRequests[]`. Handoffs include unassigned
|
|
291
280
|
actions and completed actions whose evidence and `status: "completed"` remain
|
|
@@ -299,18 +288,6 @@ team handoff also gets `🎫`. Do not create or promise an external tracker
|
|
|
299
288
|
ticket without authorization. Never imply a
|
|
300
289
|
partial fix resolved the whole report.
|
|
301
290
|
|
|
302
|
-
For beta app fixes, check the matching merge-triggered publisher and keep
|
|
303
|
-
details in the recap. Do not post a routine second reply for merge or rollout.
|
|
304
|
-
If a reporter-facing reply is otherwise due, link the merged PR and state the
|
|
305
|
-
beta status in plain language. Say it is live only after checking it there. If
|
|
306
|
-
publication is pending, say it should follow soon without an exact date. If
|
|
307
|
-
the app or behavior cannot be checked, name that limit. If the publisher is
|
|
308
|
-
missing or failed, give no ETA and name the next action and owner. Keep hashes,
|
|
309
|
-
branch names, CI, workflow details, and run IDs out of reporter replies. For
|
|
310
|
-
package work, distinguish the source PR from any release PR and registry proof;
|
|
311
|
-
source merge alone does not establish publication. Give no ETA for a pending
|
|
312
|
-
package release.
|
|
313
|
-
|
|
314
291
|
For every reply in each final full-thread snapshot, record a read-back of the
|
|
315
292
|
workflow reactions on that reply. If the connector shows `👀`, `✅`, or `🎫`,
|
|
316
293
|
call `slack_get_reactions` for the reply's own timestamp and record exact owner
|
|
@@ -140,6 +140,6 @@ export default defineAction({
|
|
|
140
140
|
|
|
141
141
|
When the gate is truthy and the call isn't yet approved, the loop emits an `approval_required` event and **stops the turn — `run()` never executes**. A predicate gates conditionally (e.g. only external recipients) and **fails closed**: a throw is treated as "approval required". It receives its own copy of the prepared snapshot of the validated arguments, defaults applied, and the approval binds to the snapshot's hash, so an approved call runs only with the arguments that were approved (a Date binds by its time). The human approves via the chat UI's Approve affordance, which re-issues the turn with the call's `approvalKey`, and only then does the action run.
|
|
142
142
|
|
|
143
|
-
Approval is given in the app, so HTTP never grants it. The HTTP action route and the generated Workers entry run a gated call only for the proven app UI (a frontend call from the signed-in user, same origin, holding the short-lived UI capability; `isProvenUiRequest`, the proof `uiOnly` uses) or the app's MCP directory widget. Every other HTTP caller (bearer or API key, MCP OAuth token, org service token,
|
|
143
|
+
Approval is given in the app, so HTTP never grants it. The HTTP action route and the generated Workers entry run a gated call only for the proven app UI (a frontend call from the signed-in user, same origin, holding the short-lived UI capability; `isProvenUiRequest`, the proof `uiOnly` uses) or the app's MCP directory widget. Every other direct HTTP caller (bearer or API key, MCP OAuth token, org service token, extension iframe, or mobile app) gets `409 approval_required`, and a service identity can never approve. A2A tasks use their separate approval flow. The task pauses until its owner approves, then replays the approved tool call under its approval lease. The shared client presents the capability with every write from a signed-in session (minted once per user, reused for nine minutes, never for reads or public pages), so a gated button works on its first request. A call without proof gets `403 ui_capability_required`; the client then re-mints and retries once, which is only the fallback for an expired or rejected capability. The agent loop, plan mode registry, HTTP action route, generated Workers entry, and MCP dispatch evaluate the gate through `preparedCallNeedsApproval`, so a throwing predicate asks there too. The local `pnpm action ...` CLI calls `handler.run()` directly and does not evaluate `needsApproval`. Treat it as a local development tool, not an approval boundary. A caller that must run unattended needs a different action, never a bypass of the gate.
|
|
144
144
|
|
|
145
145
|
**Keep approvals rare** — the default is off and almost every action should leave it off. The canonical example is Mail's `send-email` (`needsApproval: true`). See the `security` skill and the Human Approval doc.
|
|
@@ -140,6 +140,6 @@ export default defineAction({
|
|
|
140
140
|
|
|
141
141
|
When the gate is truthy and the call isn't yet approved, the loop emits an `approval_required` event and **stops the turn — `run()` never executes**. A predicate gates conditionally (e.g. only external recipients) and **fails closed**: a throw is treated as "approval required". It receives its own copy of the prepared snapshot of the validated arguments, defaults applied, and the approval binds to the snapshot's hash, so an approved call runs only with the arguments that were approved (a Date binds by its time). The human approves via the chat UI's Approve affordance, which re-issues the turn with the call's `approvalKey`, and only then does the action run.
|
|
142
142
|
|
|
143
|
-
Approval is given in the app, so HTTP never grants it. The HTTP action route and the generated Workers entry run a gated call only for the proven app UI (a frontend call from the signed-in user, same origin, holding the short-lived UI capability; `isProvenUiRequest`, the proof `uiOnly` uses) or the app's MCP directory widget. Every other HTTP caller (bearer or API key, MCP OAuth token, org service token,
|
|
143
|
+
Approval is given in the app, so HTTP never grants it. The HTTP action route and the generated Workers entry run a gated call only for the proven app UI (a frontend call from the signed-in user, same origin, holding the short-lived UI capability; `isProvenUiRequest`, the proof `uiOnly` uses) or the app's MCP directory widget. Every other direct HTTP caller (bearer or API key, MCP OAuth token, org service token, extension iframe, or mobile app) gets `409 approval_required`, and a service identity can never approve. A2A tasks use their separate approval flow. The task pauses until its owner approves, then replays the approved tool call under its approval lease. The shared client presents the capability with every write from a signed-in session (minted once per user, reused for nine minutes, never for reads or public pages), so a gated button works on its first request. A call without proof gets `403 ui_capability_required`; the client then re-mints and retries once, which is only the fallback for an expired or rejected capability. The agent loop, plan mode registry, HTTP action route, generated Workers entry, and MCP dispatch evaluate the gate through `preparedCallNeedsApproval`, so a throwing predicate asks there too. The local `pnpm action ...` CLI calls `handler.run()` directly and does not evaluate `needsApproval`. Treat it as a local development tool, not an approval boundary. A caller that must run unattended needs a different action, never a bypass of the gate.
|
|
144
144
|
|
|
145
145
|
**Keep approvals rare** — the default is off and almost every action should leave it off. The canonical example is Mail's `send-email` (`needsApproval: true`). See the `security` skill and the Human Approval doc.
|
|
@@ -13,15 +13,16 @@ metadata:
|
|
|
13
13
|
|
|
14
14
|
# Turn Into App
|
|
15
15
|
|
|
16
|
-
Give a proven workflow
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
in the UI. A form under a stepper bar is the failure to prevent.
|
|
16
|
+
Give a proven workflow an Agent-Native app face and agent brain. Start with
|
|
17
|
+
populated domain screens. Object controls send work to the agent; the object
|
|
18
|
+
shows progress and receives the result. Avoid form-under-stepper layouts.
|
|
20
19
|
|
|
21
20
|
## Host, source, and when to ask
|
|
22
21
|
|
|
23
22
|
### Classify the host
|
|
24
23
|
|
|
24
|
+
- Local scaffolding needs Node.js 22.22.0 or newer (including npm/npx) and
|
|
25
|
+
pnpm.
|
|
25
26
|
- **Local host**: a terminal, a filesystem, and a target checkout (Claude Code,
|
|
26
27
|
Codex, Cursor, or an Agent-Native agent that can edit files). Build the app in
|
|
27
28
|
that checkout with steps 1-6. Never call `start-workspace-app-creation` or
|
|
@@ -105,9 +106,8 @@ opens on a mapping or setup screen.
|
|
|
105
106
|
|
|
106
107
|
## Workflow
|
|
107
108
|
|
|
108
|
-
Copy
|
|
109
|
-
|
|
110
|
-
run one pass and list the open criteria.
|
|
109
|
+
Copy and update this checklist. Aim for 45 minutes; note the start time
|
|
110
|
+
(`date`). If review starts after 35 minutes, run one pass and list open criteria.
|
|
111
111
|
|
|
112
112
|
```text
|
|
113
113
|
- [ ] 0 Host classified, source picked
|
|
@@ -160,13 +160,12 @@ without waiting.
|
|
|
160
160
|
|
|
161
161
|
### 3. Create the real scaffold
|
|
162
162
|
|
|
163
|
-
Before the first command,
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
Before the first command, name the steps (install, scaffold, checks, dev server,
|
|
164
|
+
headless browser) and estimate work time from the source and host. Separate
|
|
165
|
+
external setup waits, so delays are expected.
|
|
166
166
|
|
|
167
|
-
Choose a short slug and never overwrite an
|
|
168
|
-
|
|
169
|
-
repository; say so when it sits inside another checkout):
|
|
167
|
+
Choose a short slug and never overwrite an app. Run standalone creation from
|
|
168
|
+
its parent directory, noting that the nested app is its own Git repository:
|
|
170
169
|
|
|
171
170
|
```bash
|
|
172
171
|
npx --yes @agent-native/core@latest create <slug> --standalone --template chat
|
|
@@ -182,11 +181,10 @@ from the workspace root:
|
|
|
182
181
|
pnpm exec agent-native add-app <slug> --template chat
|
|
183
182
|
```
|
|
184
183
|
|
|
185
|
-
Read the generated `AGENTS.md
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
dev server
|
|
189
|
-
template only when it materially fits.
|
|
184
|
+
Read the generated `AGENTS.md` and any `build-an-app` skill. This skill
|
|
185
|
+
overrides guidance that skips the design record, screenshots, or build; leaves
|
|
186
|
+
`DESIGN.md` unchanged; omits `AUTH_DISABLED` or says not to set it; or stops
|
|
187
|
+
the dev server. Use another first-party template only if it materially fits.
|
|
190
188
|
|
|
191
189
|
If a scaffold or install step fails, times out (no output for 5 minutes), or is
|
|
192
190
|
denied, the app does not exist yet. Retry once where a retry could help, then
|
|
@@ -195,6 +193,10 @@ hand-build the app in another stack, edit a pinned dependency version to force
|
|
|
195
193
|
an install, or continue in a half-created directory; a workaround the user
|
|
196
194
|
requests is named in the report.
|
|
197
195
|
|
|
196
|
+
Before resuming, inspect the target and verify completed stages. Tell the user
|
|
197
|
+
what exists, the next stage, and estimated active work; resume at the first
|
|
198
|
+
unverified stage without rerunning scaffolding or replacing completed work.
|
|
199
|
+
|
|
198
200
|
Then save the brief as `docs/brief.md`, append the domain surface's design to
|
|
199
201
|
`DESIGN.md` (UI direction guide, section 4), and follow
|
|
200
202
|
[the run and deploy guide](references/local-run-and-deploy.md) to set
|