@raidiant/notifai 11.7.1-beta.2 → 12.0.0-beta.5
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/CHANGELOG.md +56 -4
- package/NOTICE +16 -0
- package/THIRD_PARTY_NOTICES +725 -0
- package/bin/notifai.mjs +11387 -0
- package/data/install.ps1 +318 -0
- package/data/release.json +1 -0
- package/inventory.json +1 -0
- package/npm-adapter-files.json +52 -0
- package/package.json +14 -44
- package/README.md +0 -168
- package/dist/agent-update-notice.d.ts +0 -7
- package/dist/agent-update-notice.js +0 -77
- package/dist/agent-update-notice.js.map +0 -1
- package/dist/atomic-file.d.ts +0 -30
- package/dist/atomic-file.js +0 -148
- package/dist/atomic-file.js.map +0 -1
- package/dist/attendant-update.d.ts +0 -15
- package/dist/attendant-update.js +0 -96
- package/dist/attendant-update.js.map +0 -1
- package/dist/claude-wake.d.ts +0 -108
- package/dist/claude-wake.js +0 -369
- package/dist/claude-wake.js.map +0 -1
- package/dist/cli-bin.d.ts +0 -26
- package/dist/cli-bin.js +0 -220
- package/dist/cli-bin.js.map +0 -1
- package/dist/cli-contract.d.ts +0 -16
- package/dist/cli-contract.js +0 -27
- package/dist/cli-contract.js.map +0 -1
- package/dist/cli-release.d.ts +0 -36
- package/dist/cli-release.js +0 -85
- package/dist/cli-release.js.map +0 -1
- package/dist/client.d.ts +0 -109
- package/dist/client.js +0 -217
- package/dist/client.js.map +0 -1
- package/dist/codex-answer-control.d.ts +0 -14
- package/dist/codex-answer-control.js +0 -41
- package/dist/codex-answer-control.js.map +0 -1
- package/dist/codex-answer-presentation.d.ts +0 -18
- package/dist/codex-answer-presentation.js +0 -113
- package/dist/codex-answer-presentation.js.map +0 -1
- package/dist/codex-input-lifecycle.d.ts +0 -10
- package/dist/codex-input-lifecycle.js +0 -63
- package/dist/codex-input-lifecycle.js.map +0 -1
- package/dist/codex-native-control.d.ts +0 -13
- package/dist/codex-native-control.js +0 -120
- package/dist/codex-native-control.js.map +0 -1
- package/dist/codex-native-turn.d.ts +0 -37
- package/dist/codex-native-turn.js +0 -155
- package/dist/codex-native-turn.js.map +0 -1
- package/dist/codex-question-bindings.d.ts +0 -76
- package/dist/codex-question-bindings.js +0 -151
- package/dist/codex-question-bindings.js.map +0 -1
- package/dist/codex-queue-control.d.ts +0 -21
- package/dist/codex-queue-control.js +0 -59
- package/dist/codex-queue-control.js.map +0 -1
- package/dist/codex-tool-messages.d.ts +0 -7
- package/dist/codex-tool-messages.js +0 -126
- package/dist/codex-tool-messages.js.map +0 -1
- package/dist/codex-wake.d.ts +0 -58
- package/dist/codex-wake.js +0 -135
- package/dist/codex-wake.js.map +0 -1
- package/dist/command-session.d.ts +0 -14
- package/dist/command-session.js +0 -31
- package/dist/command-session.js.map +0 -1
- package/dist/commands-acknowledge.d.ts +0 -13
- package/dist/commands-acknowledge.js +0 -116
- package/dist/commands-acknowledge.js.map +0 -1
- package/dist/commands-agent-sessions.d.ts +0 -6
- package/dist/commands-agent-sessions.js +0 -51
- package/dist/commands-agent-sessions.js.map +0 -1
- package/dist/commands-ask.d.ts +0 -62
- package/dist/commands-ask.js +0 -503
- package/dist/commands-ask.js.map +0 -1
- package/dist/commands-auth.d.ts +0 -76
- package/dist/commands-auth.js +0 -421
- package/dist/commands-auth.js.map +0 -1
- package/dist/commands-close.d.ts +0 -6
- package/dist/commands-close.js +0 -273
- package/dist/commands-close.js.map +0 -1
- package/dist/commands-config.d.ts +0 -31
- package/dist/commands-config.js +0 -272
- package/dist/commands-config.js.map +0 -1
- package/dist/commands-core.d.ts +0 -145
- package/dist/commands-core.js +0 -190
- package/dist/commands-core.js.map +0 -1
- package/dist/commands-devices.d.ts +0 -41
- package/dist/commands-devices.js +0 -144
- package/dist/commands-devices.js.map +0 -1
- package/dist/commands-doctor.d.ts +0 -25
- package/dist/commands-doctor.js +0 -1553
- package/dist/commands-doctor.js.map +0 -1
- package/dist/commands-guidance.d.ts +0 -27
- package/dist/commands-guidance.js +0 -150
- package/dist/commands-guidance.js.map +0 -1
- package/dist/commands-harness-context.d.ts +0 -57
- package/dist/commands-harness-context.js +0 -102
- package/dist/commands-harness-context.js.map +0 -1
- package/dist/commands-hook-attend.d.ts +0 -70
- package/dist/commands-hook-attend.js +0 -655
- package/dist/commands-hook-attend.js.map +0 -1
- package/dist/commands-hook-diagnostics.d.ts +0 -37
- package/dist/commands-hook-diagnostics.js +0 -136
- package/dist/commands-hook-diagnostics.js.map +0 -1
- package/dist/commands-hook-install.d.ts +0 -26
- package/dist/commands-hook-install.js +0 -784
- package/dist/commands-hook-install.js.map +0 -1
- package/dist/commands-hook-run.d.ts +0 -29
- package/dist/commands-hook-run.js +0 -933
- package/dist/commands-hook-run.js.map +0 -1
- package/dist/commands-hook-shape.d.ts +0 -19
- package/dist/commands-hook-shape.js +0 -48
- package/dist/commands-hook-shape.js.map +0 -1
- package/dist/commands-init.d.ts +0 -42
- package/dist/commands-init.js +0 -901
- package/dist/commands-init.js.map +0 -1
- package/dist/commands-io.d.ts +0 -2
- package/dist/commands-io.js +0 -117
- package/dist/commands-io.js.map +0 -1
- package/dist/commands-logs.d.ts +0 -30
- package/dist/commands-logs.js +0 -201
- package/dist/commands-logs.js.map +0 -1
- package/dist/commands-native-acknowledge.d.ts +0 -8
- package/dist/commands-native-acknowledge.js +0 -114
- package/dist/commands-native-acknowledge.js.map +0 -1
- package/dist/commands-project.d.ts +0 -4
- package/dist/commands-project.js +0 -41
- package/dist/commands-project.js.map +0 -1
- package/dist/commands-receive.d.ts +0 -3
- package/dist/commands-receive.js +0 -59
- package/dist/commands-receive.js.map +0 -1
- package/dist/commands-send-support.d.ts +0 -59
- package/dist/commands-send-support.js +0 -258
- package/dist/commands-send-support.js.map +0 -1
- package/dist/commands-send.d.ts +0 -34
- package/dist/commands-send.js +0 -900
- package/dist/commands-send.js.map +0 -1
- package/dist/commands-setup-proof.d.ts +0 -43
- package/dist/commands-setup-proof.js +0 -134
- package/dist/commands-setup-proof.js.map +0 -1
- package/dist/commands-skill.d.ts +0 -21
- package/dist/commands-skill.js +0 -199
- package/dist/commands-skill.js.map +0 -1
- package/dist/commands-sounds.d.ts +0 -12
- package/dist/commands-sounds.js +0 -35
- package/dist/commands-sounds.js.map +0 -1
- package/dist/commands-update-check.d.ts +0 -6
- package/dist/commands-update-check.js +0 -102
- package/dist/commands-update-check.js.map +0 -1
- package/dist/commands-update-resume.d.ts +0 -7
- package/dist/commands-update-resume.js +0 -143
- package/dist/commands-update-resume.js.map +0 -1
- package/dist/commands-update-skill.d.ts +0 -5
- package/dist/commands-update-skill.js +0 -36
- package/dist/commands-update-skill.js.map +0 -1
- package/dist/commands-update.d.ts +0 -11
- package/dist/commands-update.js +0 -286
- package/dist/commands-update.js.map +0 -1
- package/dist/commands.d.ts +0 -26
- package/dist/commands.js +0 -27
- package/dist/commands.js.map +0 -1
- package/dist/config-schema.d.ts +0 -62
- package/dist/config-schema.js +0 -302
- package/dist/config-schema.js.map +0 -1
- package/dist/config.d.ts +0 -181
- package/dist/config.js +0 -357
- package/dist/config.js.map +0 -1
- package/dist/credentials.d.ts +0 -96
- package/dist/credentials.js +0 -342
- package/dist/credentials.js.map +0 -1
- package/dist/file-lock.d.ts +0 -34
- package/dist/file-lock.js +0 -367
- package/dist/file-lock.js.map +0 -1
- package/dist/generated-session-label.d.ts +0 -2
- package/dist/generated-session-label.js +0 -152
- package/dist/generated-session-label.js.map +0 -1
- package/dist/guidance-content.d.ts +0 -53
- package/dist/guidance-content.js +0 -248
- package/dist/guidance-content.js.map +0 -1
- package/dist/guidance-render.d.ts +0 -25
- package/dist/guidance-render.js +0 -47
- package/dist/guidance-render.js.map +0 -1
- package/dist/guidance.d.ts +0 -69
- package/dist/guidance.js +0 -173
- package/dist/guidance.js.map +0 -1
- package/dist/harness-session-title.d.ts +0 -22
- package/dist/harness-session-title.js +0 -74
- package/dist/harness-session-title.js.map +0 -1
- package/dist/harnesses.d.ts +0 -65
- package/dist/harnesses.js +0 -159
- package/dist/harnesses.js.map +0 -1
- package/dist/hermes-attendant.d.ts +0 -38
- package/dist/hermes-attendant.js +0 -337
- package/dist/hermes-attendant.js.map +0 -1
- package/dist/hermes-plugin.d.ts +0 -11
- package/dist/hermes-plugin.js +0 -299
- package/dist/hermes-plugin.js.map +0 -1
- package/dist/hook-acknowledgements.d.ts +0 -70
- package/dist/hook-acknowledgements.js +0 -490
- package/dist/hook-acknowledgements.js.map +0 -1
- package/dist/hook-adapter.d.ts +0 -48
- package/dist/hook-adapter.js +0 -419
- package/dist/hook-adapter.js.map +0 -1
- package/dist/hook-events.d.ts +0 -105
- package/dist/hook-events.js +0 -130
- package/dist/hook-events.js.map +0 -1
- package/dist/hook-gates.d.ts +0 -7
- package/dist/hook-gates.js +0 -20
- package/dist/hook-gates.js.map +0 -1
- package/dist/hook-input.d.ts +0 -10
- package/dist/hook-input.js +0 -64
- package/dist/hook-input.js.map +0 -1
- package/dist/hook-lifecycle.d.ts +0 -112
- package/dist/hook-lifecycle.js +0 -2031
- package/dist/hook-lifecycle.js.map +0 -1
- package/dist/hook-project-sessions.d.ts +0 -28
- package/dist/hook-project-sessions.js +0 -141
- package/dist/hook-project-sessions.js.map +0 -1
- package/dist/hook-question-lock.d.ts +0 -29
- package/dist/hook-question-lock.js +0 -217
- package/dist/hook-question-lock.js.map +0 -1
- package/dist/hook-question-retirement.d.ts +0 -74
- package/dist/hook-question-retirement.js +0 -314
- package/dist/hook-question-retirement.js.map +0 -1
- package/dist/hook-question-state.d.ts +0 -58
- package/dist/hook-question-state.js +0 -239
- package/dist/hook-question-state.js.map +0 -1
- package/dist/hook-session-state.d.ts +0 -127
- package/dist/hook-session-state.js +0 -488
- package/dist/hook-session-state.js.map +0 -1
- package/dist/hook-types.d.ts +0 -476
- package/dist/hook-types.js +0 -4
- package/dist/hook-types.js.map +0 -1
- package/dist/injection-render.d.ts +0 -36
- package/dist/injection-render.js +0 -61
- package/dist/injection-render.js.map +0 -1
- package/dist/install-hooks.d.ts +0 -470
- package/dist/install-hooks.js +0 -1622
- package/dist/install-hooks.js.map +0 -1
- package/dist/integration-health.d.ts +0 -26
- package/dist/integration-health.js +0 -133
- package/dist/integration-health.js.map +0 -1
- package/dist/interactive.d.ts +0 -22
- package/dist/interactive.js +0 -644
- package/dist/interactive.js.map +0 -1
- package/dist/invocation-context.d.ts +0 -47
- package/dist/invocation-context.js +0 -164
- package/dist/invocation-context.js.map +0 -1
- package/dist/local-path.d.ts +0 -7
- package/dist/local-path.js +0 -27
- package/dist/local-path.js.map +0 -1
- package/dist/logging.d.ts +0 -157
- package/dist/logging.js +0 -599
- package/dist/logging.js.map +0 -1
- package/dist/main-run.d.ts +0 -1
- package/dist/main-run.js +0 -42
- package/dist/main-run.js.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.js +0 -12
- package/dist/main.js.map +0 -1
- package/dist/native-answer-operation.d.ts +0 -70
- package/dist/native-answer-operation.js +0 -247
- package/dist/native-answer-operation.js.map +0 -1
- package/dist/native-skills.d.ts +0 -64
- package/dist/native-skills.js +0 -167
- package/dist/native-skills.js.map +0 -1
- package/dist/node-floor.d.ts +0 -19
- package/dist/node-floor.js +0 -32
- package/dist/node-floor.js.map +0 -1
- package/dist/npm-invocation.d.ts +0 -34
- package/dist/npm-invocation.js +0 -53
- package/dist/npm-invocation.js.map +0 -1
- package/dist/openclaw-continuation-bridge.d.ts +0 -7
- package/dist/openclaw-continuation-bridge.js +0 -64
- package/dist/openclaw-continuation-bridge.js.map +0 -1
- package/dist/openclaw-gateway-readiness.d.ts +0 -1
- package/dist/openclaw-gateway-readiness.js +0 -24
- package/dist/openclaw-gateway-readiness.js.map +0 -1
- package/dist/openclaw-generation.d.ts +0 -21
- package/dist/openclaw-generation.js +0 -115
- package/dist/openclaw-generation.js.map +0 -1
- package/dist/openclaw-message-bridge.d.ts +0 -8
- package/dist/openclaw-message-bridge.js +0 -93
- package/dist/openclaw-message-bridge.js.map +0 -1
- package/dist/openclaw-pending.d.ts +0 -8
- package/dist/openclaw-pending.js +0 -47
- package/dist/openclaw-pending.js.map +0 -1
- package/dist/openclaw-plugin.d.ts +0 -75
- package/dist/openclaw-plugin.js +0 -1353
- package/dist/openclaw-plugin.js.map +0 -1
- package/dist/openclaw-session-access.d.ts +0 -12
- package/dist/openclaw-session-access.js +0 -79
- package/dist/openclaw-session-access.js.map +0 -1
- package/dist/opencode-plugin.d.ts +0 -88
- package/dist/opencode-plugin.js +0 -286
- package/dist/opencode-plugin.js.map +0 -1
- package/dist/orca-session-title.d.ts +0 -11
- package/dist/orca-session-title.js +0 -111
- package/dist/orca-session-title.js.map +0 -1
- package/dist/pack-feedback-slice.d.ts +0 -35
- package/dist/pack-feedback-slice.js +0 -126
- package/dist/pack-feedback-slice.js.map +0 -1
- package/dist/pairing-qr.d.ts +0 -5
- package/dist/pairing-qr.js +0 -24
- package/dist/pairing-qr.js.map +0 -1
- package/dist/pending-pairing.d.ts +0 -38
- package/dist/pending-pairing.js +0 -70
- package/dist/pending-pairing.js.map +0 -1
- package/dist/platform.d.ts +0 -67
- package/dist/platform.js +0 -140
- package/dist/platform.js.map +0 -1
- package/dist/process-identity.d.ts +0 -26
- package/dist/process-identity.js +0 -82
- package/dist/process-identity.js.map +0 -1
- package/dist/program.d.ts +0 -59
- package/dist/program.js +0 -691
- package/dist/program.js.map +0 -1
- package/dist/project-enablement.d.ts +0 -21
- package/dist/project-enablement.js +0 -71
- package/dist/project-enablement.js.map +0 -1
- package/dist/question-settlement-process.d.ts +0 -17
- package/dist/question-settlement-process.js +0 -35
- package/dist/question-settlement-process.js.map +0 -1
- package/dist/question-timing.d.ts +0 -46
- package/dist/question-timing.js +0 -48
- package/dist/question-timing.js.map +0 -1
- package/dist/readiness.d.ts +0 -153
- package/dist/readiness.js +0 -149
- package/dist/readiness.js.map +0 -1
- package/dist/release.d.ts +0 -31
- package/dist/release.js +0 -52
- package/dist/release.js.map +0 -1
- package/dist/send-attempts.d.ts +0 -26
- package/dist/send-attempts.js +0 -139
- package/dist/send-attempts.js.map +0 -1
- package/dist/send.d.ts +0 -115
- package/dist/send.js +0 -421
- package/dist/send.js.map +0 -1
- package/dist/session-activation.d.ts +0 -13
- package/dist/session-activation.js +0 -64
- package/dist/session-activation.js.map +0 -1
- package/dist/session-attendant-probe.d.ts +0 -85
- package/dist/session-attendant-probe.js +0 -173
- package/dist/session-attendant-probe.js.map +0 -1
- package/dist/session-attendant-state.d.ts +0 -70
- package/dist/session-attendant-state.js +0 -256
- package/dist/session-attendant-state.js.map +0 -1
- package/dist/session-attendant.d.ts +0 -143
- package/dist/session-attendant.js +0 -520
- package/dist/session-attendant.js.map +0 -1
- package/dist/session-delivery.d.ts +0 -249
- package/dist/session-delivery.js +0 -576
- package/dist/session-delivery.js.map +0 -1
- package/dist/session-handoff.d.ts +0 -98
- package/dist/session-handoff.js +0 -118
- package/dist/session-handoff.js.map +0 -1
- package/dist/session-input-wakes.d.ts +0 -78
- package/dist/session-input-wakes.js +0 -239
- package/dist/session-input-wakes.js.map +0 -1
- package/dist/session-inputs.d.ts +0 -57
- package/dist/session-inputs.js +0 -434
- package/dist/session-inputs.js.map +0 -1
- package/dist/session-labels.d.ts +0 -56
- package/dist/session-labels.js +0 -396
- package/dist/session-labels.js.map +0 -1
- package/dist/session-message-handoff.d.ts +0 -39
- package/dist/session-message-handoff.js +0 -107
- package/dist/session-message-handoff.js.map +0 -1
- package/dist/setup-destinations.d.ts +0 -23
- package/dist/setup-destinations.js +0 -44
- package/dist/setup-destinations.js.map +0 -1
- package/dist/skill-integrity.d.ts +0 -54
- package/dist/skill-integrity.js +0 -164
- package/dist/skill-integrity.js.map +0 -1
- package/dist/skill-source/manifest.json +0 -40
- package/dist/skill-source/notifai/SKILL.md +0 -350
- package/dist/skill-source/notifai/references/diagnostics.md +0 -36
- package/dist/skill-source/notifai/references/harness-setup.md +0 -384
- package/dist/skill-source/notifai/references/native-questions.md +0 -51
- package/dist/skill-source/notifai/references/notes-and-edits.md +0 -54
- package/dist/skill-source/notifai/references/send-details.md +0 -14
- package/dist/skill-source/notifai/references/updates.md +0 -116
- package/dist/skill-source/notifai/references/writing-examples.md +0 -56
- package/dist/sound-ref.d.ts +0 -23
- package/dist/sound-ref.js +0 -28
- package/dist/sound-ref.js.map +0 -1
- package/dist/ui/banner.d.ts +0 -22
- package/dist/ui/banner.js +0 -87
- package/dist/ui/banner.js.map +0 -1
- package/dist/ui/config-view.d.ts +0 -30
- package/dist/ui/config-view.js +0 -108
- package/dist/ui/config-view.js.map +0 -1
- package/dist/ui/help.d.ts +0 -44
- package/dist/ui/help.js +0 -107
- package/dist/ui/help.js.map +0 -1
- package/dist/ui/theme.d.ts +0 -90
- package/dist/ui/theme.js +0 -244
- package/dist/ui/theme.js.map +0 -1
- package/dist/update-handoff.d.ts +0 -29
- package/dist/update-handoff.js +0 -69
- package/dist/update-handoff.js.map +0 -1
- package/dist/url-policy.d.ts +0 -85
- package/dist/url-policy.js +0 -369
- package/dist/url-policy.js.map +0 -1
- package/dist/version.d.ts +0 -40
- package/dist/version.js +0 -132
- package/dist/version.js.map +0 -1
- package/dist/wake-support.d.ts +0 -40
- package/dist/wake-support.js +0 -95
- package/dist/wake-support.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-plugin.js","sourceRoot":"","sources":["../src/openclaw-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,MAAM,EACN,KAAK,EACL,SAAS,EACT,mBAAmB,GAGpB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAyB,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EACL,kCAAkC,EAClC,yBAAyB,GAC1B,MAAM,yBAAyB,CAAA;AAEhC;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,CAAC,MAAM,sBAAsB,GAAG,oCAAoC,CAAA;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAA;AAClD,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAA;AAC9D,MAAM,CAAC,MAAM,uBAAuB,GAAG,cAAc,CAAA;AAErD,MAAM,wBAAwB,GAAG,CAAC,CAAA;AAElC,MAAM,UAAU,gBAAgB,CAC9B,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA+C,OAAO,CAAC,QAAQ;IAE/D,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAC1C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAA;IAC9D,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC,CAAA;IACzC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAA;AAClE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA+C,OAAO,CAAC,QAAQ;IAE/D,MAAM,QAAQ,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAA;IAC5C,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,QAAQ,CAAA;IAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,eAAe,CAAC,CAAA;AACpE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA+C,OAAO,CAAC,QAAQ;IAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAA;AACrF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA+C,OAAO,CAAC,QAAQ;IAE/D,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAA;AAC9E,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,8BAA8B,CAAC,GAAW;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,GAAW;IACzD,OAAO,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE,wBAAwB,CAAC,CAAA;AACjF,CAAC;AASD,oFAAoF;AACpF,SAAS,iCAAiC;IACxC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6uBR,CAAA;AACD,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,GAAG,IAAI,CAAC,SAAS,CACtB;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,wEAAwE;QACrF,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;QAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,KAAK,EAAE;KAC9D,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CAAA;AACP,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO,GAAG,IAAI,CAAC,SAAS,CACtB;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,KAAK,wBAAwB,EAAE,CAAC,EAAE;KAC5D,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CAAA;AACP,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,OAAO,CAAA;IAC/C,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAA;IAC5D,MAAM,YAAY,GAAG,KAAK;QACxB,CAAC,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI;QAC1E,CAAC,CAAC,EAAE,CAAA;IACN,MAAM,cAAc,GAAG,KAAK;QAC1B,CAAC,CAAC,+EAA+E;QACjF,CAAC,CAAC,yEAAyE,CAAA;IAC7E,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAA;IAC/D,OAAO,GAAG,sBAAsB;;;;;;;;EAQhC,YAAY,mBAAmB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;uBACrC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;sBAC3E,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3C,cAAc,GAAG,IAAI;0BAChB,wBAAwB;6CACL,IAAI,CAAC,SAAS,CAAC,kCAAkC,CAAC;oCAC3D,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC;;;;;;sBAMvD,cAAc;;uBAEb,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmGhC,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAmG7B,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;;;;CAIzC,CAAA;AACD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,QAAgB;IAEhB,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/C,MAAM,OAAO,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/D,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,kCAAkC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACnF,MAAM,SAAS,GAAG,MAAM,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA;IACzF,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IACtC,IAAI,CAAC;QACH,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAW;YACtC,OAAO,EAAE,OAAO,KAAK,wBAAwB;YAC7C,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3E,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAW,EAAE,CAAC;SACxE,CAAA;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAc,EACd,UAAU,GAAG,iBAAiB;IAE9B,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAY,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM;aACpB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,KAAK,CAAC,MAAM,EAAE,CAAC;aAC/E,IAAI,CAAC,IAAI,CAAC,CAAA;QACb,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,4BAA4B,QAAQ,sBAAsB,CAAC,CAAA;IAC1F,CAAC;IACD,IAAI,YAAY,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAA;IACvC,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,0CAA0C,CAAC,CAAA;AAC1E,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;IACxE,OAAO;QACL,YAAY,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;QACzC,OAAO,EAAE,WAAW,CAAC,MAAM;QAC3B,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;KAC7C,CAAA;AACH,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,sBAAsB,CACpC,MAAc,EACd,UAAkB,EAClB,QAAkB,EAClB,KAAc;IAEd,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACvC,OAAO,UAAU,CACf,MAAM,EACN,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC,CAC1F,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3C,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,+BAA+B,CAAC,MAAc,EAAE,UAAkB;IAChF,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACtD,MAAM,MAAM,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAChD,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAE,CAAA;IAC/C,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAE,CAAA;IACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAExC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;IAChF,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,sBAAsB,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,aAAa,CAAC,CAAA;IAC1F,CAAC;IACD,OAAO,sBAAsB,CAC3B,MAAM,EACN,UAAU,EACV,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAC1C,aAAa,CAAC,kBAAkB,CAAC,CAClC,CAAA;AACH,CAAC;AAOD,uEAAuE;AACvE,4EAA4E;AAC5E,MAAM,WAAW,GAAG,CAAC,CAAA;AACrB,MAAM,kBAAkB,GAAG,EAAE,CAAA;AAC7B,MAAM,mBAAmB,GAAG,EAAE,CAAA;AAC9B,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB,SAAS,QAAQ,CAAC,MAAc,EAAE,IAAY,EAAE,EAAU;IACxD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACrC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACzB,IAAI,KAAK,GAAkB,IAAI,CAAA;IAC/B,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,OAAO,OAAO,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAA;QACvC,IAAI,MAAM,IAAI,EAAE,IAAI,KAAK,KAAK,SAAS;YAAE,MAAK;QAC9C,IAAI,KAAK,KAAK,WAAW;YAAE,KAAK,GAAG,MAAM,CAAA;QACzC,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,mBAAmB,EAAE,CAAC;YAClE,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,MAAc,EAAE,IAAc;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IAC9B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACrC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACtC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAA;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAA;IAC7B,MAAM,QAAQ,GAAG,SAAS,EAAE,QAAQ,CAAA;IACpC,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IACpE,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IACrC,MAAM,MAAM,GAA4B,EAAE,CAAA;IAE1C,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,MAAM,CAAC,CAAA;QAC9D,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO,MAAM,CAAA;QACrC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAC/E,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;QAC9E,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAE,CAAA;YACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAC5E,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI;gBAAE,OAAO,MAAM,CAAA;YACrC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,+DAA+D;YAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YAC/D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAA;YACjE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;gBAClE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAA;YACrF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC;IAED,IAAI,IAAI,GAAG,MAAM,CAAA;IACjB,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,0BAA0B,CAAC,MAAc,EAAE,SAAiB;IACnE,IAAI,IAAI,GAAG,MAAM,CAAA;IACjB,SAAS,CAAC;QACR,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;QACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAA;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;QAC7D,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,IAAI,CAAA;QAC1B,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAA;QACvE,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC7E,IAAI,GAAG,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,+BAA+B,CAC7C,MAAc,EACd,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;IAC/D,MAAM,YAAY,GAAG,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC;QACjF,CAAC,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACrE,CAAC,CAAC,MAAM,CAAA;IACV,OAAO,0BAA0B,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;AAC5D,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gCAAgC,CAC9C,MAAc,EACd,UAAkB,EAClB,SAAiB;IAEjB,mBAAmB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACvC,OAAO,0BAA0B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AACtD,CAAC;AAOD,MAAM,UAAU,0BAA0B,CACxC,MAA+B;IAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAgC,EAAE,CAAA;IAChD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpF,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACxD,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;IAC1D,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAkC;IACzE,OAAO,OAAO,CAAC,MAAM,KAAK,KAAK;QAC7B,CAAC,CAAC,SAAS,kBAAkB,SAAS,OAAO,CAAC,GAAG,EAAE;QACnD,CAAC,CAAC,YAAY,kBAAkB,WAAW,OAAO,CAAC,GAAG,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAqC;IAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACtC,OAAO,mCAAmC,QAAQ,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA;AAChG,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAA+B;IAE/B,MAAM,OAAO,GACX,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;QAC7F,CAAC,CAAC,EAAE,GAAI,MAAM,CAAC,OAAmC,EAAE;QACpD,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAChG,CAAC,CAAC,EAAE,GAAI,OAAO,CAAC,OAAmC,EAAE;QACrD,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,QAAQ,GACZ,OAAO,CAAC,kBAAkB,CAAC,KAAK,IAAI;QACpC,OAAO,OAAO,CAAC,kBAAkB,CAAC,KAAK,QAAQ;QAC/C,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACzC,CAAC,CAAC,EAAE,GAAI,OAAO,CAAC,kBAAkB,CAA6B,EAAE;QACjE,CAAC,CAAC,EAAE,CAAA;IACR,MAAM,KAAK,GACT,QAAQ,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC7F,CAAC,CAAC,EAAE,GAAI,QAAQ,CAAC,KAAiC,EAAE;QACpD,CAAC,CAAC,EAAE,CAAA;IACR,OAAO,CAAC,kBAAkB,CAAC,GAAG;QAC5B,GAAG,QAAQ;QACX,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE;KACnD,CAAA;IACD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;IACzB,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAA;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,MAA+B,EAC/B,SAAiB;IAEjB,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,IAAI,cAAc,KAAK,IAAI,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAO,MAAM,CAAA;IACf,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,GAAG,WAAW,EAAE,CAAA;IAC/B,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAc,CAAA;IACvD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM;QAAE,OAAO,MAAM,CAAA;IACxD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IAClB,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,cAAc,EAAE,IAAI,EAAE,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAA+B,EAC/B,SAAiB;IAEjB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,MAAM,CAAA;IAChD,MAAM,cAAc,GAAG,MAAM,CAAC,OAAkC,CAAA;IAChE,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAA;IAC1D,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;IACpD,MAAM,YAAY,GAChB,cAAc,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IAC9E,MAAM,eAAe,GACnB,WAAW,KAAK,IAAI;QACpB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC1C,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe;QAAE,OAAO,MAAM,CAAA;IACpD,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,CAAA;IACrC,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,EAAE,GAAG,cAAc,EAAE,CAAA;QACrC,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAClC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAA;IAC3B,CAAC;IACD,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,GAAG;YACb,GAAG,WAAW;YACd,KAAK,EAAG,WAAW,CAAC,OAAO,CAAe,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAClF,CAAA;IACH,CAAC;IACD,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,CAAA;AAC/B,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,yBAAyB,CACvC,MAAiC,EACjC,MAAyB,OAAO,CAAC,GAAG,EACpC,WAA+C,OAAO,CAAC,QAAQ;IAE/D,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAC7C,OAAO,CACL,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CACtC,CAAA;AACH,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A stable sessionKey alone is insufficient: /new and /reset can reuse it.
|
|
3
|
-
* The generated plugin places the generation observed by resolve_exec_env in
|
|
4
|
-
* the tool's environment, and this check compares it with fresh CLI-owned state.
|
|
5
|
-
*/
|
|
6
|
-
export declare function activeOpenclawGeneration(sessionKey: string, env: NodeJS.ProcessEnv, cwd?: string): string | null;
|
|
7
|
-
/** A pointer may reveal User text only to the active generation that owns it. */
|
|
8
|
-
export declare function openclawOwnsReply(sessionKey: string, requestId: string, env: NodeJS.ProcessEnv, cwd?: string): boolean;
|
|
9
|
-
/** A Session Message belongs to the generation that accepted its acknowledgement debt. */
|
|
10
|
-
export declare function openclawOwnsMessage(sessionKey: string, messageId: string, env: NodeJS.ProcessEnv, cwd?: string): boolean;
|
|
11
|
-
/** Record ownership as soon as a foreground submission returns its request ID. */
|
|
12
|
-
export declare function recordOpenclawForegroundReply(sessionKey: string, requestId: string, generation: string, env: NodeJS.ProcessEnv, cwd: string): boolean;
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/** Exact-generation access to OpenClaw reply pointers in agent tool subprocesses. */
|
|
2
|
-
import { readSessionIncarnation, readSessionState, sessionHasEnded, updateSessionState } from './hook-session-state.js';
|
|
3
|
-
import { openclawGenerationLockPath, readOpenclawGeneration } from './openclaw-generation.js';
|
|
4
|
-
import { withFileLock } from './file-lock.js';
|
|
5
|
-
import { loadConfig } from './config.js';
|
|
6
|
-
import { projectBinding, projectEnabled } from './project-enablement.js';
|
|
7
|
-
/**
|
|
8
|
-
* A stable sessionKey alone is insufficient: /new and /reset can reuse it.
|
|
9
|
-
* The generated plugin places the generation observed by resolve_exec_env in
|
|
10
|
-
* the tool's environment, and this check compares it with fresh CLI-owned state.
|
|
11
|
-
*/
|
|
12
|
-
export function activeOpenclawGeneration(sessionKey, env, cwd) {
|
|
13
|
-
if (env['NOTIFAI_ACTIVE_HARNESS'] !== 'openclaw' ||
|
|
14
|
-
env['NOTIFAI_ACTIVE_SESSION_ID'] !== sessionKey)
|
|
15
|
-
return null;
|
|
16
|
-
const marker = env['NOTIFAI_ACTIVE_OPENCLAW_GENERATION'];
|
|
17
|
-
if (marker === undefined || marker === '')
|
|
18
|
-
return null;
|
|
19
|
-
const generation = readOpenclawGeneration(sessionKey, env);
|
|
20
|
-
const incarnation = readSessionIncarnation(sessionKey, env);
|
|
21
|
-
if (generation === null || incarnation === null || generation.ended ||
|
|
22
|
-
!generation.activated || sessionHasEnded(sessionKey, env) ||
|
|
23
|
-
generation.id !== marker || incarnation.openclaw_generation !== marker)
|
|
24
|
-
return null;
|
|
25
|
-
if (cwd !== undefined) {
|
|
26
|
-
try {
|
|
27
|
-
const config = loadConfig({ cwd, env, sessionId: sessionKey });
|
|
28
|
-
if (!projectEnabled(projectBinding(cwd, env, config.project.value)))
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return marker;
|
|
36
|
-
}
|
|
37
|
-
/** A pointer may reveal User text only to the active generation that owns it. */
|
|
38
|
-
export function openclawOwnsReply(sessionKey, requestId, env, cwd) {
|
|
39
|
-
return withFileLock(openclawGenerationLockPath(sessionKey, env), () => {
|
|
40
|
-
const generation = activeOpenclawGeneration(sessionKey, env, cwd);
|
|
41
|
-
if (generation === null)
|
|
42
|
-
return false;
|
|
43
|
-
const state = readSessionState(sessionKey, env);
|
|
44
|
-
return (state.pending ?? []).some((entry) => entry.request_id === requestId) ||
|
|
45
|
-
(state.delivered_answers ?? []).some((entry) => entry.pending.request_id === requestId) ||
|
|
46
|
-
(state.acknowledgement_due ?? []).some((entry) => entry.request_id === requestId) ||
|
|
47
|
-
(state.accepted?.answers ?? []).some((entry) => entry.pending.request_id === requestId) ||
|
|
48
|
-
(state.openclaw_foreground_replies ?? []).some((entry) => entry.request_id === requestId && entry.generation === generation);
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
/** A Session Message belongs to the generation that accepted its acknowledgement debt. */
|
|
52
|
-
export function openclawOwnsMessage(sessionKey, messageId, env, cwd) {
|
|
53
|
-
return withFileLock(openclawGenerationLockPath(sessionKey, env), () => {
|
|
54
|
-
const generation = activeOpenclawGeneration(sessionKey, env, cwd);
|
|
55
|
-
if (generation === null)
|
|
56
|
-
return false;
|
|
57
|
-
return (readSessionState(sessionKey, env).message_acknowledgement_due ?? [])
|
|
58
|
-
.some((entry) => entry.message_id === messageId && entry.openclaw_generation === generation);
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
/** Record ownership as soon as a foreground submission returns its request ID. */
|
|
62
|
-
export function recordOpenclawForegroundReply(sessionKey, requestId, generation, env, cwd) {
|
|
63
|
-
return withFileLock(openclawGenerationLockPath(sessionKey, env), () => {
|
|
64
|
-
if (activeOpenclawGeneration(sessionKey, env, cwd) !== generation)
|
|
65
|
-
return false;
|
|
66
|
-
let recorded = false;
|
|
67
|
-
updateSessionState(sessionKey, env, (state) => {
|
|
68
|
-
recorded = true;
|
|
69
|
-
const entries = state.openclaw_foreground_replies ?? [];
|
|
70
|
-
return entries.some((entry) => entry.request_id === requestId && entry.generation === generation)
|
|
71
|
-
? state
|
|
72
|
-
: { ...state, openclaw_foreground_replies: [
|
|
73
|
-
...entries, { request_id: requestId, generation },
|
|
74
|
-
] };
|
|
75
|
-
});
|
|
76
|
-
return recorded;
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=openclaw-session-access.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openclaw-session-access.js","sourceRoot":"","sources":["../src/openclaw-session-access.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { type HookHostPlatform } from './hook-adapter.js';
|
|
2
|
-
/**
|
|
3
|
-
* The OpenCode adapter.
|
|
4
|
-
*
|
|
5
|
-
* OpenCode's extension point is a TypeScript/JavaScript plugin module, not a
|
|
6
|
-
* command hook, so it needs a different adapter rather than a different path
|
|
7
|
-
* through the existing one. What it is *not* is different logic: the generated
|
|
8
|
-
* plugin shells out to the same `notifai hook <event>` commands Claude Code and
|
|
9
|
-
* Codex invoke, and every decision — presence, the grace window, the reply
|
|
10
|
-
* wait, retirement — stays in one place.
|
|
11
|
-
*
|
|
12
|
-
* The three lifecycle joints map onto the same three events. OpenCode exposes
|
|
13
|
-
* `chat.message` as a direct hook, while session lifecycle notifications arrive
|
|
14
|
-
* through its generic `event` hook:
|
|
15
|
-
*
|
|
16
|
-
* chat.message -> user-prompt-submit (the user is at the keyboard)
|
|
17
|
-
* session.idle -> stop (the turn ended; escalate)
|
|
18
|
-
* session.deleted -> session-end (retire local session state)
|
|
19
|
-
*
|
|
20
|
-
* Permission prompts deliberately stay in OpenCode. The CLI question flow
|
|
21
|
-
* only escalates questions explicitly registered with `notifai ask`.
|
|
22
|
-
*/
|
|
23
|
-
/** Marker line; also how an install from another checkout is recognised. */
|
|
24
|
-
export declare const OPENCODE_PLUGIN_MARKER = "// notifai managed opencode plugin";
|
|
25
|
-
/** Filename we own inside whichever plugins directory is being written. */
|
|
26
|
-
export declare const OPENCODE_PLUGIN_FILENAME = "notifai.js";
|
|
27
|
-
/**
|
|
28
|
-
* OpenCode's global config directory for the running installation.
|
|
29
|
-
*
|
|
30
|
-
* OpenCode resolves that directory through `xdg-basedir` (`Global.Path.config`
|
|
31
|
-
* = `$XDG_CONFIG_HOME/opencode`, defaulting to `~/.config/opencode`).
|
|
32
|
-
* `OPENCODE_CONFIG_DIR` remains the explicit override and wins, matching the
|
|
33
|
-
* precedence this installer already gave that variable.
|
|
34
|
-
*/
|
|
35
|
-
export declare function opencodeConfigDir(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform | HookHostPlatform): string;
|
|
36
|
-
export declare function opencodePluginDir(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform | HookHostPlatform): string;
|
|
37
|
-
export declare function opencodePluginPath(env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform | HookHostPlatform): string;
|
|
38
|
-
export interface OpencodePluginOptions {
|
|
39
|
-
/** The same stable user-level adapter every command-hook harness invokes. */
|
|
40
|
-
adapterPath: string;
|
|
41
|
-
/** Child-process lifetime; covers grace, reply wait, and teardown headroom. */
|
|
42
|
-
timeoutSeconds: number;
|
|
43
|
-
platform?: NodeJS.Platform | HookHostPlatform;
|
|
44
|
-
/** Registered Node used to interpret the Windows adapter. Ignored on POSIX. */
|
|
45
|
-
nodePath?: string;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* The generated module.
|
|
49
|
-
*
|
|
50
|
-
* Written as a string rather than compiled from a source file because OpenCode
|
|
51
|
-
* loads a plugin module rather than a command definition. It embeds only the
|
|
52
|
-
* stable user-level adapter path; mutable runtime and CLI targets live behind
|
|
53
|
-
* that adapter exactly as they do for every other harness.
|
|
54
|
-
*
|
|
55
|
-
* Everything it does is build the hook envelope OpenCode's event gives it and
|
|
56
|
-
* hand that to the CLI on stdin. It deliberately fails open: an adapter error
|
|
57
|
-
* never changes OpenCode's own behavior.
|
|
58
|
-
*/
|
|
59
|
-
/**
|
|
60
|
-
* The plugin body, which is the same on every platform except for how it
|
|
61
|
-
* reaches the adapter.
|
|
62
|
-
*
|
|
63
|
-
* It was two near-identical copies — about a hundred and twenty lines each,
|
|
64
|
-
* differing only in the spawn call — so every fix to the plugin had to be made
|
|
65
|
-
* twice or silently apply to one platform.
|
|
66
|
-
*/
|
|
67
|
-
export declare function opencodePluginSource(options: OpencodePluginOptions): string;
|
|
68
|
-
/** True when a plugin file on disk is one of ours, whoever installed it. */
|
|
69
|
-
export declare function isOurOpencodePlugin(contents: string): boolean;
|
|
70
|
-
/**
|
|
71
|
-
* The interpreter and script a generated plugin will actually run.
|
|
72
|
-
*
|
|
73
|
-
* A plugin is a module rather than a command line, so which *build* it invokes
|
|
74
|
-
* is not visible in the way it is for a settings-file handler — it is baked
|
|
75
|
-
* into the two constants at the top. `doctor` needs it to answer the question
|
|
76
|
-
* it exists to answer ("are two checkouts both installed?"), and without it
|
|
77
|
-
* the plugin's own path stands in for the build and every OpenCode install
|
|
78
|
-
* looks like a second one.
|
|
79
|
-
*
|
|
80
|
-
* Returns null for a plugin we did not generate, or one whose constants have
|
|
81
|
-
* been edited out of recognisable shape.
|
|
82
|
-
*/
|
|
83
|
-
export declare function opencodePluginTarget(contents: string): {
|
|
84
|
-
adapter: string;
|
|
85
|
-
current: boolean;
|
|
86
|
-
timeoutSeconds?: number;
|
|
87
|
-
nodePath?: string;
|
|
88
|
-
} | null;
|
package/dist/opencode-plugin.js
DELETED
|
@@ -1,286 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { hookHostPlatform } from './hook-adapter.js';
|
|
3
|
-
import { harnessAccountHome } from './install-hooks.js';
|
|
4
|
-
import { MISSING_LIFECYCLE_GUIDANCE_CONTEXT, WORKER_ACTIVATION_CONTEXT, } from './session-activation.js';
|
|
5
|
-
/**
|
|
6
|
-
* The OpenCode adapter.
|
|
7
|
-
*
|
|
8
|
-
* OpenCode's extension point is a TypeScript/JavaScript plugin module, not a
|
|
9
|
-
* command hook, so it needs a different adapter rather than a different path
|
|
10
|
-
* through the existing one. What it is *not* is different logic: the generated
|
|
11
|
-
* plugin shells out to the same `notifai hook <event>` commands Claude Code and
|
|
12
|
-
* Codex invoke, and every decision — presence, the grace window, the reply
|
|
13
|
-
* wait, retirement — stays in one place.
|
|
14
|
-
*
|
|
15
|
-
* The three lifecycle joints map onto the same three events. OpenCode exposes
|
|
16
|
-
* `chat.message` as a direct hook, while session lifecycle notifications arrive
|
|
17
|
-
* through its generic `event` hook:
|
|
18
|
-
*
|
|
19
|
-
* chat.message -> user-prompt-submit (the user is at the keyboard)
|
|
20
|
-
* session.idle -> stop (the turn ended; escalate)
|
|
21
|
-
* session.deleted -> session-end (retire local session state)
|
|
22
|
-
*
|
|
23
|
-
* Permission prompts deliberately stay in OpenCode. The CLI question flow
|
|
24
|
-
* only escalates questions explicitly registered with `notifai ask`.
|
|
25
|
-
*/
|
|
26
|
-
/** Marker line; also how an install from another checkout is recognised. */
|
|
27
|
-
export const OPENCODE_PLUGIN_MARKER = '// notifai managed opencode plugin';
|
|
28
|
-
/** Filename we own inside whichever plugins directory is being written. */
|
|
29
|
-
export const OPENCODE_PLUGIN_FILENAME = 'notifai.js';
|
|
30
|
-
/** Bump when an installed generated file must be rewritten to remain functional. */
|
|
31
|
-
const OPENCODE_ADAPTER_VERSION = 13;
|
|
32
|
-
/**
|
|
33
|
-
* OpenCode's global config directory for the running installation.
|
|
34
|
-
*
|
|
35
|
-
* OpenCode resolves that directory through `xdg-basedir` (`Global.Path.config`
|
|
36
|
-
* = `$XDG_CONFIG_HOME/opencode`, defaulting to `~/.config/opencode`).
|
|
37
|
-
* `OPENCODE_CONFIG_DIR` remains the explicit override and wins, matching the
|
|
38
|
-
* precedence this installer already gave that variable.
|
|
39
|
-
*/
|
|
40
|
-
export function opencodeConfigDir(env = process.env, platform = process.platform) {
|
|
41
|
-
const override = env['OPENCODE_CONFIG_DIR'];
|
|
42
|
-
if (override !== undefined && override !== '')
|
|
43
|
-
return override;
|
|
44
|
-
const xdg = env['XDG_CONFIG_HOME'];
|
|
45
|
-
if (typeof xdg === 'string' && xdg !== '')
|
|
46
|
-
return path.join(xdg, 'opencode');
|
|
47
|
-
return path.join(harnessAccountHome(env, platform), '.config', 'opencode');
|
|
48
|
-
}
|
|
49
|
-
export function opencodePluginDir(env = process.env, platform = process.platform) {
|
|
50
|
-
return path.join(opencodeConfigDir(env, platform), 'plugins');
|
|
51
|
-
}
|
|
52
|
-
export function opencodePluginPath(env = process.env, platform = process.platform) {
|
|
53
|
-
return path.join(opencodePluginDir(env, platform), OPENCODE_PLUGIN_FILENAME);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* The generated module.
|
|
57
|
-
*
|
|
58
|
-
* Written as a string rather than compiled from a source file because OpenCode
|
|
59
|
-
* loads a plugin module rather than a command definition. It embeds only the
|
|
60
|
-
* stable user-level adapter path; mutable runtime and CLI targets live behind
|
|
61
|
-
* that adapter exactly as they do for every other harness.
|
|
62
|
-
*
|
|
63
|
-
* Everything it does is build the hook envelope OpenCode's event gives it and
|
|
64
|
-
* hand that to the CLI on stdin. It deliberately fails open: an adapter error
|
|
65
|
-
* never changes OpenCode's own behavior.
|
|
66
|
-
*/
|
|
67
|
-
/**
|
|
68
|
-
* The plugin body, which is the same on every platform except for how it
|
|
69
|
-
* reaches the adapter.
|
|
70
|
-
*
|
|
71
|
-
* It was two near-identical copies — about a hundred and twenty lines each,
|
|
72
|
-
* differing only in the spawn call — so every fix to the plugin had to be made
|
|
73
|
-
* twice or silently apply to one platform.
|
|
74
|
-
*/
|
|
75
|
-
export function opencodePluginSource(options) {
|
|
76
|
-
const { adapterPath, timeoutSeconds } = options;
|
|
77
|
-
// Windows cannot execute the adapter script directly, so it goes through the
|
|
78
|
-
// registered Node executable and the console window is suppressed.
|
|
79
|
-
const win32 = hookHostPlatform(options.platform) === 'win32';
|
|
80
|
-
const nodeConstant = win32
|
|
81
|
-
? `const NODE = ${JSON.stringify(options.nodePath ?? process.execPath)}\n`
|
|
82
|
-
: '';
|
|
83
|
-
const spawnArguments = win32
|
|
84
|
-
? 'NODE, [ADAPTER, "hook", event, "--owner", "notifai", "--harness", "opencode"]'
|
|
85
|
-
: 'ADAPTER, ["hook", event, "--owner", "notifai", "--harness", "opencode"]';
|
|
86
|
-
const windowsHide = win32 ? '\n windowsHide: true,' : '';
|
|
87
|
-
return `${OPENCODE_PLUGIN_MARKER}
|
|
88
|
-
// Generated by \`notifai hooks install --harness opencode\`. Edits are lost on
|
|
89
|
-
// the next install; change the CLI instead, which is where the logic lives.
|
|
90
|
-
import { spawn } from "node:child_process"
|
|
91
|
-
|
|
92
|
-
${nodeConstant}const ADAPTER = ${JSON.stringify(adapterPath)}
|
|
93
|
-
const TIMEOUT_MS = ${timeoutSeconds * 1000}
|
|
94
|
-
const ADAPTER_VERSION = ${OPENCODE_ADAPTER_VERSION}
|
|
95
|
-
const MISSING_LIFECYCLE_GUIDANCE_CONTEXT = ${JSON.stringify(MISSING_LIFECYCLE_GUIDANCE_CONTEXT)}
|
|
96
|
-
const WORKER_ACTIVATION_CONTEXT = ${JSON.stringify(WORKER_ACTIVATION_CONTEXT)}
|
|
97
|
-
const PENDING_SESSION_TITLE =
|
|
98
|
-
/^New session(?: *- *[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(?:[.][0-9]+)?Z)?$/i
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Runs \`notifai hook <event>\`, feeding it the same JSON envelope the other
|
|
102
|
-
* harnesses send. Resolves to stdout, or null if anything at all went wrong.
|
|
103
|
-
*/
|
|
104
|
-
function runHook(event, envelope) {
|
|
105
|
-
return new Promise((resolve) => {
|
|
106
|
-
let child
|
|
107
|
-
try {
|
|
108
|
-
child = spawn(${spawnArguments}, {
|
|
109
|
-
env: process.env,
|
|
110
|
-
shell: false,${windowsHide}
|
|
111
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
112
|
-
})
|
|
113
|
-
} catch {
|
|
114
|
-
resolve(null)
|
|
115
|
-
return
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
let stdout = ""
|
|
119
|
-
let settled = false
|
|
120
|
-
const finish = (value) => {
|
|
121
|
-
if (settled) return
|
|
122
|
-
settled = true
|
|
123
|
-
clearTimeout(timer)
|
|
124
|
-
resolve(value)
|
|
125
|
-
}
|
|
126
|
-
const timer = setTimeout(() => {
|
|
127
|
-
child.kill("SIGTERM")
|
|
128
|
-
finish(null)
|
|
129
|
-
}, TIMEOUT_MS)
|
|
130
|
-
|
|
131
|
-
child.stdout?.setEncoding("utf-8")
|
|
132
|
-
child.stdout?.on("data", (chunk) => {
|
|
133
|
-
stdout += chunk
|
|
134
|
-
})
|
|
135
|
-
// Hook stderr is diagnostics, not plugin output; discard it here.
|
|
136
|
-
child.stderr?.resume()
|
|
137
|
-
child.on("error", () => finish(null))
|
|
138
|
-
child.on("close", (code) => finish(code === 0 ? stdout : null))
|
|
139
|
-
|
|
140
|
-
try {
|
|
141
|
-
child.stdin?.end(JSON.stringify(envelope))
|
|
142
|
-
} catch {
|
|
143
|
-
finish(null)
|
|
144
|
-
}
|
|
145
|
-
})
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export const NotifAIPlugin = async ({ directory, client }) => {
|
|
149
|
-
const cwd = typeof directory === "string" && directory.length > 0 ? directory : process.cwd()
|
|
150
|
-
|
|
151
|
-
return {
|
|
152
|
-
/** Model-visible activation, independent of CLI setup and delivery state. */
|
|
153
|
-
"experimental.chat.system.transform": async (input, output) => {
|
|
154
|
-
const sessionID = input?.sessionID
|
|
155
|
-
if (typeof sessionID !== "string" || sessionID.length === 0) return
|
|
156
|
-
// OpenCode represents delegated work as child sessions. Missing or
|
|
157
|
-
// malformed relationship data must fail closed as worker context: it is
|
|
158
|
-
// safe to suppress a notification, never safe to let a child duplicate
|
|
159
|
-
// its parent's User-visible request.
|
|
160
|
-
let worker = true
|
|
161
|
-
try {
|
|
162
|
-
const response = await client.session.get({ path: { id: sessionID } })
|
|
163
|
-
const session = response?.data
|
|
164
|
-
if (session !== null && typeof session === "object") {
|
|
165
|
-
worker = typeof session.parentID === "string" && session.parentID.length > 0
|
|
166
|
-
}
|
|
167
|
-
} catch {
|
|
168
|
-
// Keep the safe worker classification.
|
|
169
|
-
}
|
|
170
|
-
const hookEventName = worker ? "SubagentStart" : "SessionStart"
|
|
171
|
-
const resolved = await runHook(worker ? "subagent-start" : "session-start", {
|
|
172
|
-
session_id: sessionID,
|
|
173
|
-
cwd,
|
|
174
|
-
hook_event_name: hookEventName,
|
|
175
|
-
})
|
|
176
|
-
// Successful empty output is the runtime's deliberate disabled-Project
|
|
177
|
-
// no-op. Recheck on every request so later enablement takes effect.
|
|
178
|
-
if (resolved !== null && resolved.trim().length === 0) return
|
|
179
|
-
const context = typeof resolved === "string" && resolved.trim().length > 0
|
|
180
|
-
? resolved.trim()
|
|
181
|
-
: worker ? WORKER_ACTIVATION_CONTEXT : MISSING_LIFECYCLE_GUIDANCE_CONTEXT
|
|
182
|
-
// OpenCode rebuilds system[] per model request. Do not latch activation
|
|
183
|
-
// per session; only deduplicate callbacks sharing this same array.
|
|
184
|
-
if (output.system.some((part) => part.includes(context))) return
|
|
185
|
-
if (output.system.length === 0) {
|
|
186
|
-
output.system.push(context)
|
|
187
|
-
} else {
|
|
188
|
-
output.system[0] = output.system[0] + "\\n\\n" + context
|
|
189
|
-
}
|
|
190
|
-
},
|
|
191
|
-
|
|
192
|
-
/** Exact active-harness identity and first-party title for agent shell commands. */
|
|
193
|
-
"shell.env": async (input, output) => {
|
|
194
|
-
output.env.NOTIFAI_ACTIVE_HARNESS = "opencode"
|
|
195
|
-
const sessionID = input?.sessionID
|
|
196
|
-
if (typeof sessionID === "string" && sessionID.length > 0) {
|
|
197
|
-
output.env.NOTIFAI_ACTIVE_SESSION_ID = sessionID
|
|
198
|
-
try {
|
|
199
|
-
const response = await client.session.get({ path: { id: sessionID } })
|
|
200
|
-
const title = response?.data?.title
|
|
201
|
-
if (typeof title === "string" && title.trim().length > 0) {
|
|
202
|
-
if (PENDING_SESSION_TITLE.test(title.trim())) {
|
|
203
|
-
output.env.NOTIFAI_ACTIVE_SESSION_LABEL_PENDING = "1"
|
|
204
|
-
} else {
|
|
205
|
-
output.env.NOTIFAI_ACTIVE_SESSION_LABEL = title
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
} catch {
|
|
209
|
-
// Identity remains useful when this OpenCode build cannot expose a title.
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
|
|
214
|
-
/**
|
|
215
|
-
* Presence. The user typing is the signal every harness shares, and it is
|
|
216
|
-
* also what publishes the project -> session pointer \`notifai ask\` reads.
|
|
217
|
-
*/
|
|
218
|
-
/** Publishes the session pointer; the CLI returns no content to inject. */
|
|
219
|
-
"chat.message": async (input) => {
|
|
220
|
-
await runHook("user-prompt-submit", {
|
|
221
|
-
session_id: input?.sessionID ?? input?.info?.sessionID,
|
|
222
|
-
cwd,
|
|
223
|
-
hook_event_name: "UserPromptSubmit",
|
|
224
|
-
})
|
|
225
|
-
},
|
|
226
|
-
|
|
227
|
-
/** Session lifecycle events are delivered through OpenCode's event bus. */
|
|
228
|
-
event: async ({ event }) => {
|
|
229
|
-
if (event?.type === "session.idle") {
|
|
230
|
-
await runHook("stop", {
|
|
231
|
-
session_id: event?.properties?.sessionID,
|
|
232
|
-
cwd,
|
|
233
|
-
hook_event_name: "Stop",
|
|
234
|
-
})
|
|
235
|
-
} else if (event?.type === "session.deleted") {
|
|
236
|
-
await runHook("session-end", {
|
|
237
|
-
session_id: event?.properties?.info?.id,
|
|
238
|
-
cwd,
|
|
239
|
-
hook_event_name: "SessionEnd",
|
|
240
|
-
})
|
|
241
|
-
}
|
|
242
|
-
},
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
`;
|
|
246
|
-
}
|
|
247
|
-
/** True when a plugin file on disk is one of ours, whoever installed it. */
|
|
248
|
-
export function isOurOpencodePlugin(contents) {
|
|
249
|
-
return contents.includes(OPENCODE_PLUGIN_MARKER);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* The interpreter and script a generated plugin will actually run.
|
|
253
|
-
*
|
|
254
|
-
* A plugin is a module rather than a command line, so which *build* it invokes
|
|
255
|
-
* is not visible in the way it is for a settings-file handler — it is baked
|
|
256
|
-
* into the two constants at the top. `doctor` needs it to answer the question
|
|
257
|
-
* it exists to answer ("are two checkouts both installed?"), and without it
|
|
258
|
-
* the plugin's own path stands in for the build and every OpenCode install
|
|
259
|
-
* looks like a second one.
|
|
260
|
-
*
|
|
261
|
-
* Returns null for a plugin we did not generate, or one whose constants have
|
|
262
|
-
* been edited out of recognisable shape.
|
|
263
|
-
*/
|
|
264
|
-
export function opencodePluginTarget(contents) {
|
|
265
|
-
if (!isOurOpencodePlugin(contents))
|
|
266
|
-
return null;
|
|
267
|
-
const adapter = /^const ADAPTER = (".*")$/m.exec(contents)?.[1];
|
|
268
|
-
const legacyScript = /^const SCRIPT = (".*")$/m.exec(contents)?.[1];
|
|
269
|
-
const node = /^const NODE = (".*")$/m.exec(contents)?.[1];
|
|
270
|
-
const version = Number(/^const ADAPTER_VERSION = (\d+)$/m.exec(contents)?.[1] ?? 1);
|
|
271
|
-
const timeoutMs = Number(/^const TIMEOUT_MS = (\d+)$/m.exec(contents)?.[1] ?? Number.NaN);
|
|
272
|
-
if (adapter === undefined && legacyScript === undefined)
|
|
273
|
-
return null;
|
|
274
|
-
try {
|
|
275
|
-
return {
|
|
276
|
-
adapter: JSON.parse(adapter ?? legacyScript),
|
|
277
|
-
current: version === OPENCODE_ADAPTER_VERSION,
|
|
278
|
-
...(Number.isFinite(timeoutMs) ? { timeoutSeconds: timeoutMs / 1000 } : {}),
|
|
279
|
-
...(node === undefined ? {} : { nodePath: JSON.parse(node) }),
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
return null;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
//# sourceMappingURL=opencode-plugin.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opencode-plugin.js","sourceRoot":"","sources":["../src/opencode-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export type OrcaSessionTitleLookup = (env: NodeJS.ProcessEnv) => string | undefined;
|
|
2
|
-
export type OrcaCommand = (executable: string, args: readonly string[]) => string | null;
|
|
3
|
-
/**
|
|
4
|
-
* Read the User-facing task name assigned to this exact Orca Agent Session.
|
|
5
|
-
*
|
|
6
|
-
* The environment contributes only opaque selectors. Orca must return the
|
|
7
|
-
* exact worktree id and path plus the exact pane before its task title becomes
|
|
8
|
-
* trusted; Project, branch, path, worktree, and pane strings are never
|
|
9
|
-
* promoted into an Agent Session label.
|
|
10
|
-
*/
|
|
11
|
-
export declare function readOrcaSessionTitle(env: NodeJS.ProcessEnv, command?: OrcaCommand): string | undefined;
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
const runOrcaCommand = (executable, args) => {
|
|
4
|
-
try {
|
|
5
|
-
return execFileSync(executable, args, {
|
|
6
|
-
encoding: 'utf8',
|
|
7
|
-
stdio: ['ignore', 'pipe', 'ignore'],
|
|
8
|
-
timeout: 2_000,
|
|
9
|
-
maxBuffer: 512 * 1024,
|
|
10
|
-
windowsHide: true,
|
|
11
|
-
}).trim();
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
function containsControlCharacter(value) {
|
|
18
|
-
return Array.from(value).some((character) => {
|
|
19
|
-
const codePoint = character.codePointAt(0) ?? 0;
|
|
20
|
-
return codePoint < 32 || codePoint === 127;
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
function worktreePathFromId(value) {
|
|
24
|
-
if (value.length === 0 || value.length > 4_096 || containsControlCharacter(value))
|
|
25
|
-
return null;
|
|
26
|
-
const separator = value.indexOf('::');
|
|
27
|
-
if (separator <= 0)
|
|
28
|
-
return null;
|
|
29
|
-
const repoId = value.slice(0, separator);
|
|
30
|
-
const worktreePath = value.slice(separator + 2);
|
|
31
|
-
if (!/^[A-Za-z0-9._-]+$/u.test(repoId) || worktreePath.length === 0)
|
|
32
|
-
return null;
|
|
33
|
-
return path.posix.isAbsolute(worktreePath) || path.win32.isAbsolute(worktreePath)
|
|
34
|
-
? worktreePath
|
|
35
|
-
: null;
|
|
36
|
-
}
|
|
37
|
-
function opaqueSelector(value) {
|
|
38
|
-
if (value === undefined ||
|
|
39
|
-
value.length === 0 ||
|
|
40
|
-
value.length > 1_024 ||
|
|
41
|
-
containsControlCharacter(value)) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
return value;
|
|
45
|
-
}
|
|
46
|
-
function orcaExecutable(env) {
|
|
47
|
-
const configured = env['ORCA_CLI_COMMAND']?.trim();
|
|
48
|
-
if (configured !== undefined && configured.length > 0) {
|
|
49
|
-
return containsControlCharacter(configured) ? null : configured;
|
|
50
|
-
}
|
|
51
|
-
return env['ORCA_DEV_REPO_ROOT'] === undefined ? 'orca' : 'orca-dev';
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Read the User-facing task name assigned to this exact Orca Agent Session.
|
|
55
|
-
*
|
|
56
|
-
* The environment contributes only opaque selectors. Orca must return the
|
|
57
|
-
* exact worktree id and path plus the exact pane before its task title becomes
|
|
58
|
-
* trusted; Project, branch, path, worktree, and pane strings are never
|
|
59
|
-
* promoted into an Agent Session label.
|
|
60
|
-
*/
|
|
61
|
-
export function readOrcaSessionTitle(env, command = runOrcaCommand) {
|
|
62
|
-
if (env['TERM_PROGRAM'] !== 'Orca')
|
|
63
|
-
return undefined;
|
|
64
|
-
const worktreeId = env['ORCA_WORKTREE_ID'];
|
|
65
|
-
if (worktreeId === undefined)
|
|
66
|
-
return undefined;
|
|
67
|
-
const expectedPath = worktreePathFromId(worktreeId);
|
|
68
|
-
if (expectedPath === null)
|
|
69
|
-
return undefined;
|
|
70
|
-
const paneKey = opaqueSelector(env['ORCA_PANE_KEY']);
|
|
71
|
-
if (paneKey === null)
|
|
72
|
-
return undefined;
|
|
73
|
-
const executable = orcaExecutable(env);
|
|
74
|
-
if (executable === null)
|
|
75
|
-
return undefined;
|
|
76
|
-
let output;
|
|
77
|
-
try {
|
|
78
|
-
output = command(executable, ['worktree', 'ps', '--json']);
|
|
79
|
-
}
|
|
80
|
-
catch {
|
|
81
|
-
return undefined;
|
|
82
|
-
}
|
|
83
|
-
if (output === null || output === '')
|
|
84
|
-
return undefined;
|
|
85
|
-
let parsed;
|
|
86
|
-
try {
|
|
87
|
-
parsed = JSON.parse(output);
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
if (typeof parsed !== 'object' || parsed === null)
|
|
93
|
-
return undefined;
|
|
94
|
-
const response = parsed;
|
|
95
|
-
if (response.ok !== true || !Array.isArray(response.result?.worktrees))
|
|
96
|
-
return undefined;
|
|
97
|
-
const worktrees = response.result.worktrees.filter((candidate) => typeof candidate === 'object' &&
|
|
98
|
-
candidate !== null &&
|
|
99
|
-
candidate.worktreeId === worktreeId &&
|
|
100
|
-
candidate.path === expectedPath);
|
|
101
|
-
if (worktrees.length !== 1 || !Array.isArray(worktrees[0].agents))
|
|
102
|
-
return undefined;
|
|
103
|
-
const agents = worktrees[0].agents.filter((candidate) => typeof candidate === 'object' &&
|
|
104
|
-
candidate !== null &&
|
|
105
|
-
candidate.paneKey === paneKey);
|
|
106
|
-
if (agents.length !== 1)
|
|
107
|
-
return undefined;
|
|
108
|
-
const taskTitle = agents[0].taskTitle;
|
|
109
|
-
return typeof taskTitle === 'string' && taskTitle.trim().length > 0 ? taskTitle : undefined;
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=orca-session-title.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"orca-session-title.js","sourceRoot":"","sources":["../src/orca-session-title.ts"],"names":[],"mappings":"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"}
|