agentlinkops 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.codex-plugin/plugin.json +1 -1
  3. package/.mcp.json +0 -0
  4. package/CHANGELOG.md +17 -0
  5. package/LICENSE +0 -0
  6. package/NOTICE +0 -0
  7. package/README.md +0 -0
  8. package/bin/agentlinkops.mjs +0 -0
  9. package/bin/linktrail.mjs +0 -0
  10. package/cli/adapters/csv.js +0 -0
  11. package/cli/adapters/sqlite-crm.js +0 -0
  12. package/cli/adapters/suppliers.js +0 -0
  13. package/cli/admission.js +130 -0
  14. package/cli/agent-setup.js +1014 -101
  15. package/cli/agentlinkops.mjs +0 -0
  16. package/cli/args.js +0 -0
  17. package/cli/catalog.js +12837 -4694
  18. package/cli/check.js +0 -0
  19. package/cli/citation.js +181 -32
  20. package/cli/client.js +1 -1
  21. package/cli/commands.js +3 -3
  22. package/cli/config.js +2 -1
  23. package/cli/connection.js +0 -0
  24. package/cli/context-mcp.js +0 -0
  25. package/cli/context.js +0 -0
  26. package/cli/delivery.js +0 -0
  27. package/cli/disavow.js +54 -0
  28. package/cli/doctor.js +7 -8
  29. package/cli/env.js +0 -0
  30. package/cli/fleet.js +0 -0
  31. package/cli/gsc-browser.js +0 -0
  32. package/cli/import.js +0 -0
  33. package/cli/index-observations.js +89 -0
  34. package/cli/ledger.js +7 -1
  35. package/cli/lifecycle.js +40 -0
  36. package/cli/linktrail.mjs +0 -0
  37. package/cli/local-result.js +0 -0
  38. package/cli/main.js +99 -7
  39. package/cli/mirror.js +0 -0
  40. package/cli/mix.js +0 -0
  41. package/cli/platforms.js +0 -0
  42. package/cli/receipt-performance.js +0 -0
  43. package/cli/receipts.js +0 -0
  44. package/cli/report.js +79 -6
  45. package/cli/setup-plan.js +0 -0
  46. package/cli/skill.js +41 -4
  47. package/cli/state.js +0 -0
  48. package/cli/status.js +0 -0
  49. package/cli/sync.js +23 -1
  50. package/package.json +3 -2
  51. package/references/citation-panels.md +26 -0
  52. package/references/cli.md +0 -0
  53. package/references/disavow.md +0 -0
  54. package/references/discovery-handoff.md +32 -0
  55. package/references/recipes/catalog.json +148 -0
  56. package/references/recipes/command-notes.md +9 -0
  57. package/references/recipes/placement-reconciliation.md +41 -0
  58. package/references/recipes/qualified-campaign-handoff.md +56 -0
  59. package/references/recipes/site-context-brief.md +25 -0
  60. package/references/recipes/sourced-linkable-asset.md +25 -0
  61. package/references/reports.md +0 -0
  62. package/scripts/agentlinkops.py +0 -0
  63. package/scripts/disavow.py +0 -0
  64. package/scripts/linktrail.py +0 -0
  65. package/scripts/migrations/001_crm.sql +0 -0
  66. package/scripts/migrations/002_cloud_events.sql +0 -0
  67. package/scripts/migrations/003_disavow.sql +0 -0
  68. package/scripts/migrations/004_placement_costs.sql +0 -0
  69. package/scripts/report.py +0 -0
  70. package/shared/admission-contract.js +16 -0
  71. package/shared/admission-report-contract.js +8 -0
  72. package/shared/agent-clients.js +0 -0
  73. package/shared/citation-evidence-contract.js +27 -0
  74. package/shared/disavow-contract.js +18 -0
  75. package/shared/index-observation-contract.js +14 -0
  76. package/shared/lifecycle-contract.js +22 -0
  77. package/shared/lifecycle-money.js +24 -0
  78. package/shared/observation-event.js +12 -1
  79. package/shared/opportunity-record.js +259 -0
  80. package/shared/response-contract.js +2 -0
  81. package/shared/search-connection-contract.js +0 -0
  82. package/skills/agentlinkops-assets/SKILL.md +2 -0
  83. package/skills/agentlinkops-assets/agents/openai.yaml +0 -0
  84. package/skills/agentlinkops-campaigns/SKILL.md +5 -1
  85. package/skills/agentlinkops-campaigns/agents/openai.yaml +0 -0
  86. package/skills/agentlinkops-connect/SKILL.md +8 -0
  87. package/skills/agentlinkops-connect/agents/openai.yaml +0 -0
  88. package/skills/agentlinkops-connect/references/agentlinkops.md +9 -5
  89. package/skills/agentlinkops-crm/SKILL.md +2 -0
  90. package/skills/agentlinkops-crm/agents/openai.yaml +0 -0
  91. package/skills/agentlinkops-discovery/SKILL.md +17 -0
  92. package/skills/content-defingerprinting/SKILL.md +0 -0
  93. package/skills/content-defingerprinting/scripts/watermarks/README.md +0 -0
  94. package/skills/content-defingerprinting/scripts/watermarks/UPSTREAM.json +0 -0
  95. package/skills/content-defingerprinting/scripts/watermarks/revendor.sh +0 -0
  96. package/skills/content-defingerprinting/scripts/watermarks/vendor/LICENSE.upstream +0 -0
  97. package/skills/content-defingerprinting/scripts/watermarks/vendor/clean_text.py +0 -0
  98. package/skills/content-defingerprinting/scripts/watermarks/vendor/common.py +0 -0
  99. package/skills/content-defingerprinting/scripts/watermarks/vendor/inspect_text.py +0 -0
  100. package/skills/content-defingerprinting/scripts/watermarks/vendor/score_stylometry.py +0 -0
  101. package/skills/content-defingerprinting/scripts/watermarks/vendor/text_unicode.py +0 -0
  102. package/skills/content-defingerprinting/scripts/watermarks/verify-vendor.py +0 -0
  103. package/skills/content-defingerprinting/scripts/watermarks/wm-scan.py +0 -0
  104. package/skills/internal-linking-optimizer/SKILL.md +0 -0
  105. package/skills/internal-linking-optimizer/references/source-prompt.md +0 -0
  106. package/skills/pre-publish-review/SKILL.md +0 -0
  107. package/skills/source-cited-content-builder/SKILL.md +0 -0
  108. package/skills/source-cited-content-builder/references/source-prompt.md +0 -0
  109. package/skills/source-cited-humanizer/SKILL.md +0 -0
  110. package/src/citations/adapter.js +102 -21
  111. package/src/citations/alert.js +38 -13
  112. package/src/citations/browser/engine.js +145 -50
  113. package/src/citations/browser/gen/core/providers/_shared/rawSourcesDom.js +0 -0
  114. package/src/citations/browser/gen/core/providers/_shared/resetProviderPage.js +0 -0
  115. package/src/citations/browser/gen/core/providers/_shared/sourceUtils.js +0 -0
  116. package/src/citations/browser/gen/core/providers/ai-overview/index.js +0 -0
  117. package/src/citations/browser/gen/core/providers/ai-overview/lib/expand.js +0 -0
  118. package/src/citations/browser/gen/core/providers/ai-overview/lib/extractSources.js +0 -0
  119. package/src/citations/browser/gen/core/providers/ai-overview/lib/pageLifecycle.js +0 -0
  120. package/src/citations/browser/gen/core/providers/ai-overview/lib/session.js +0 -0
  121. package/src/citations/browser/gen/core/providers/chatgpt/index.js +0 -0
  122. package/src/citations/browser/gen/core/providers/chatgpt/lib/dismissAuthModal.js +0 -0
  123. package/src/citations/browser/gen/core/providers/chatgpt/lib/extractSources.js +0 -0
  124. package/src/citations/browser/gen/core/providers/chatgpt/lib/pageLifecycle.js +0 -0
  125. package/src/citations/browser/gen/core/providers/claude/index.js +0 -0
  126. package/src/citations/browser/gen/core/providers/claude/lib/extractSources.js +0 -0
  127. package/src/citations/browser/gen/core/providers/claude/lib/pageLifecycle.js +0 -0
  128. package/src/citations/browser/gen/core/providers/gemini/index.js +0 -0
  129. package/src/citations/browser/gen/core/providers/gemini/lib/extractSources.js +0 -0
  130. package/src/citations/browser/gen/core/providers/gemini/lib/pageLifecycle.js +0 -0
  131. package/src/citations/browser/gen/core/providers/gemini/lib/session.js +0 -0
  132. package/src/citations/browser/gen/core/providers/index.js +0 -0
  133. package/src/citations/browser/gen/core/providers/perplexity/index.js +0 -0
  134. package/src/citations/browser/gen/core/providers/perplexity/lib/extractSources.js +0 -0
  135. package/src/citations/browser/gen/core/providers/perplexity/lib/navigation.js +0 -0
  136. package/src/citations/browser/gen/lib/browser/camoufox.js +0 -0
  137. package/src/citations/browser/gen/lib/browser/display.js +0 -0
  138. package/src/citations/browser/gen/lib/browser/domOps.js +0 -0
  139. package/src/citations/browser/gen/lib/browser/humanBehavior.js +0 -0
  140. package/src/citations/browser/gen/lib/browser/navigate.js +0 -0
  141. package/src/citations/browser/gen/lib/extraction/sourceUtils.js +0 -0
  142. package/src/citations/browser/gen/lib/input/editor/clearInput.js +0 -0
  143. package/src/citations/browser/gen/lib/input/editor/findEditor.js +0 -0
  144. package/src/citations/browser/gen/lib/input/editor/promptInput.js +0 -0
  145. package/src/citations/browser/gen/lib/input/markdown/converter.js +0 -0
  146. package/src/citations/browser/gen/lib/input/markdown/toMarkdown.js +0 -0
  147. package/src/citations/browser/gen/lib/input/response/detectBotPage.js +0 -0
  148. package/src/citations/browser/gen/lib/input/response/isGenerating.js +0 -0
  149. package/src/citations/browser/gen/lib/input/response/waitForFinish.js +0 -0
  150. package/src/citations/browser/gen/lib/input/sources/findButton.js +0 -0
  151. package/src/citations/browser/gen/lib/input/sources/openPanel.js +0 -0
  152. package/src/citations/browser/gen/utils/agent-constants.js +0 -0
  153. package/src/citations/browser/providers.js +3 -1
  154. package/src/citations/browser/shims/errors.js +0 -0
  155. package/src/citations/browser/shims/types.js +0 -0
  156. package/src/citations/browser/shims/utils.js +1 -0
  157. package/src/citations/contract.js +55 -9
  158. package/src/citations/inventory.js +106 -0
  159. package/src/citations/login.js +122 -0
  160. package/src/citations/match.js +12 -0
  161. package/src/citations/panel-builder.js +44 -39
  162. package/src/citations/report.js +88 -21
  163. package/src/citations/runner.js +59 -31
  164. package/src/citations/stats.js +133 -61
  165. package/src/citations/sync.js +131 -0
  166. package/src/citations/watch.js +57 -77
  167. package/src/competitors/contract.js +0 -0
  168. package/src/competitors/domain-mix.js +0 -0
  169. package/src/context/ga4.js +0 -0
  170. package/src/context/gsc.js +0 -0
  171. package/src/context/site-profile.js +0 -0
  172. package/src/context/util.js +0 -0
  173. package/src/context-tool-registry.js +0 -0
  174. package/src/corpus/acquire.js +47 -8
  175. package/src/corpus/seeds.js +132 -19
  176. package/src/discovery/contract.js +0 -0
  177. package/src/discovery/import.js +0 -0
  178. package/src/evidence-reference.js +112 -0
  179. package/src/index-observation.js +161 -0
  180. package/src/locator.js +112 -0
  181. package/src/tool-views.js +6 -2
  182. package/src/verifier/fetch.js +42 -6
  183. package/src/verifier/index.js +0 -0
  184. package/src/verifier/observation-kind.js +0 -0
  185. package/src/verifier/parser.js +0 -0
  186. package/src/verifier/readiness.js +0 -0
  187. package/src/verifier/render-evidence.js +0 -0
  188. package/src/verifier/robots.js +0 -0
  189. package/src/verifier/transition.js +0 -0
  190. package/src/verifier/url.js +0 -0
  191. package/templates/SITE.template.md +0 -0
  192. package/templates/campaigns.v1.json +0 -0
  193. package/src/citations/browser/gen/core/providers/_shared/google.js +0 -4
  194. package/src/citations/browser/gen/core/providers/types.js +0 -0
  195. package/src/citations/browser/gen/lib/browser/playwrightCompat.js +0 -321
  196. package/src/citations/browser/gen/lib/browser/proxy/forwarder.js +0 -251
  197. package/src/citations/browser/gen/lib/browser/runtimeTypes.js +0 -0
  198. package/src/citations/browser/gen/lib/input/editor/assertNotBlocked.js +0 -54
  199. package/src/citations/browser/gen/lib/input/editor/findSendButton.js +0 -21
  200. package/src/citations/browser/gen/lib/input/response/getText.js +0 -10
  201. package/src/citations/fixtures/dataforseo-aio.json +0 -82
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentlinkops",
3
- "version": "0.5.1",
3
+ "version": "0.6.3",
4
4
  "description": "Connect an agent to AgentLinkOps and run backlink work with it: the connect skill (views, the three discovery verbs, evidence rules), local ledger and campaign skills, a portable CRM, the source-cited content pipeline, user-managed disavow lists, HTML reports and monitoring-event sync.",
5
5
  "author": {
6
6
  "name": "AgentLinkOps"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentlinkops",
3
- "version": "0.5.1",
3
+ "version": "0.6.3",
4
4
  "description": "Connect an agent to AgentLinkOps and run backlink work with it: the connect skill (views, the three discovery verbs, evidence rules), local ledger and campaign skills, a portable CRM, the source-cited content pipeline, user-managed disavow lists, HTML reports and monitoring-event sync.",
5
5
  "author": {
6
6
  "name": "AgentLinkOps"
package/.mcp.json CHANGED
File without changes
package/CHANGELOG.md CHANGED
@@ -3,6 +3,23 @@
3
3
  All notable changes to the `agentlinkops` package are recorded here. The version follows the
4
4
  plugin manifests in `.claude-plugin/` and `.codex-plugin/`.
5
5
 
6
+ ## 0.6.3 (2026-09-20)
7
+
8
+ - Agent installation preserves customer edits and supports previewed removal and interrupted-install recovery.
9
+ - Four versioned recipes ship within the existing five product skills, with native Codex discovery and bounded recovery evaluation.
10
+ - Admission and disavow commands expose rule checks, retained decisions and deterministic customer-owned exports. Approval requires a signed-in owner or administrator.
11
+ - Lifecycle commands retain supplied deal metadata in currency minor units. Explicit lifecycle sync mirrors hosted facts without overwriting the local ledger.
12
+ - The command catalog includes retained profile distributions, per-widget exports and historical link location evidence. Unknown evidence remains unknown.
13
+
14
+ ## 0.6.2 (2026-09-20)
15
+
16
+ - Citation panels support competitor targets and explicit locale contexts. New panels default to the free mock engine; prompt suggestions remain editable.
17
+ - Citation reports show bounded epoch history, retained evidence and unknown results. Local cadence commands preserve configured paths and require explicit webhook opt-in.
18
+ - Citation statistics retain null rates for all-unknown samples and add supplemental confidence sequences and exploratory change candidates. These do not establish a real-world change date.
19
+ - Google AI Overview ingestion validates supplier responses and provenance. Live use requires configured credentials and a budget; missing credentials never select fixture results.
20
+ - Cloud-synced link receipts preserve content hashes and checker metadata when the hosted event supplies them.
21
+ - Packaging follows dynamic imports and retains the maintained browser providers, with declared runtime dependencies.
22
+
6
23
  ## 0.5.1 (2026-09-17)
7
24
 
8
25
  - The plugin's `.mcp.json` ships in the tarball. 0.5.0 left it out, so a marketplace install
package/LICENSE CHANGED
File without changes
package/NOTICE CHANGED
File without changes
package/README.md CHANGED
File without changes
File without changes
package/bin/linktrail.mjs CHANGED
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,130 @@
1
+ import * as R from '../shared/admission-report-contract.js';
2
+ import { parseArgs } from "./args.js";
3
+ import { ConfigError } from "./config.js";
4
+ import * as C from "../shared/admission-contract.js";
5
+
6
+ // The caller supplies its already configured scoped client; this module never
7
+ // reads credentials or falls back to a different project.
8
+ const operations = {
9
+ reevaluate:{name:'reevaluate_admission',input:R.admissionReevaluateInput,output:R.admissionReevaluateOutput,flags:['source','limit','cursor']},
10
+ receipt:{name:'get_admission_decisions',input:R.admissionReceiptInput,output:R.admissionReceiptOutput,flags:['id']},
11
+ list: {
12
+ name: "list_admission_rules",
13
+ input: C.admissionListInput,
14
+ output: C.admissionListOutput,
15
+ flags: ["limit", "cursor"],
16
+ },
17
+ add: {
18
+ name: "add_admission_rule",
19
+ input: C.admissionRuleInput,
20
+ output: C.admissionMutationOutput,
21
+ flags: ["kind", "value", "note", "disabled"],
22
+ },
23
+ update: {
24
+ name: "update_admission_rule",
25
+ input: C.admissionUpdateInput,
26
+ output: C.admissionMutationOutput,
27
+ flags: ["id", "revision", "value", "note", "enable", "disable"],
28
+ },
29
+ remove: {
30
+ name: "delete_admission_rule",
31
+ input: C.admissionDeleteInput,
32
+ output: C.admissionDeleteOutput,
33
+ flags: ["id", "revision", "apply"],
34
+ },
35
+ evaluate: {
36
+ name: "evaluate_admission",
37
+ input: C.admissionEvaluateInput,
38
+ output: C.admissionEvaluateOutput,
39
+ flags: ["url", "context"],
40
+ },
41
+ };
42
+ export async function admissionMain(
43
+ argv,
44
+ { client, out = console.log, err = console.error } = {},
45
+ ) {
46
+ try {
47
+ const seen = new Set();
48
+ for (const token of argv.filter((a) => a.startsWith("--"))) {
49
+ const name = token.slice(2).split("=")[0];
50
+ if (seen.has(name) && name !== "url")
51
+ throw new ConfigError("Duplicate admission option.");
52
+ seen.add(name);
53
+ }
54
+ const a = parseArgs(argv, ["url"]),
55
+ op = operations[a._[0]];
56
+ if (
57
+ !op ||
58
+ a._.length !== 1 ||
59
+ Object.keys(a).some(
60
+ (k) => !["_", "project", "json", ...op.flags].includes(k),
61
+ )
62
+ )
63
+ throw new ConfigError(
64
+ "Use admission list|add|update|remove|evaluate|reevaluate|receipt with --project and explicit rule arguments.",
65
+ );
66
+ for (const flag of ["json", "disabled", "enable", "disable", "apply"])
67
+ if (a[flag] !== undefined && a[flag] !== true)
68
+ throw new ConfigError(`--${flag} takes no value.`);
69
+ if (a.enable && a.disable)
70
+ throw new ConfigError("Choose --enable or --disable, not both.");
71
+ const body = { projectId: a.project };
72
+ if (["list","reevaluate"].includes(a._[0])) {
73
+ if (a.limit !== undefined) body.limit = Number(a.limit);
74
+ if (a.cursor !== undefined) body.cursor = a.cursor;
75
+ }
76
+ if (a._[0] === "add") {
77
+ Object.assign(body, { kind: a.kind, value: a.value });
78
+ if (a.disabled) body.enabled = false;
79
+ }
80
+ if (["add", "update"].includes(a._[0])) {
81
+ if (a.note !== undefined) body.note = a.note;
82
+ if (a.value !== undefined) body.value = a.value;
83
+ }
84
+ if (["update", "remove"].includes(a._[0]))
85
+ Object.assign(body, { ruleId: a.id, revision: Number(a.revision) });
86
+ if (a._[0] === "update") {
87
+ if (a.enable || a.disable) body.enabled = !!a.enable;
88
+ if (
89
+ a.value === undefined &&
90
+ a.note === undefined &&
91
+ !a.enable &&
92
+ !a.disable
93
+ )
94
+ throw new ConfigError(
95
+ "An update requires a changed value, note or enabled state.",
96
+ );
97
+ }
98
+ if (a._[0] === "remove" && a.apply !== true)
99
+ throw new ConfigError(
100
+ "Removal requires --apply and the reviewed rule revision.",
101
+ );
102
+ if (a._[0] === "evaluate") {
103
+ body.urls = a.url;
104
+ if (a.context !== undefined) body.context = a.context;
105
+ }
106
+ if(a._[0]==='reevaluate')body.source=a.source;
107
+ if(a._[0]==='receipt')body.operationId=a.id;
108
+ const parsed = op.input.safeParse(body);
109
+ if (!parsed.success)
110
+ throw new ConfigError(
111
+ "Invalid admission arguments; project, bounds, kind and revision must match the command contract.",
112
+ );
113
+ if (!client || typeof client.callCommand !== "function")
114
+ throw new ConfigError(
115
+ "Admission requires a configured scoped cloud client.",
116
+ );
117
+ const result = op.output.safeParse(
118
+ await client.callCommand(op.name, parsed.data),
119
+ );
120
+ if (!result.success)
121
+ throw new ConfigError(
122
+ "Invalid admission response; no result was accepted.",
123
+ );
124
+ out(JSON.stringify(result.data, null, 2));
125
+ return 0;
126
+ } catch (error) {
127
+ err(error?.code ? `${error.code}: ${error.message}` : error.message);
128
+ return 2;
129
+ }
130
+ }